IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django ORM表的创建和增删改查 -> 正文阅读

[Python知识库]Django ORM表的创建和增删改查

系列文章目录

初识Django


django orm简介

ORM:对象关系映射

将“类”映射为“表”、

将“对象”映射为“记录“

将”对象获取属性的方法“映射为“记录某个字段对应的值”

ORM无法创建库 需要提前创建好

orm创建表

在models.py中书写代码

from django.db import models

# Create your models here.

class User(models.Model):
    # 创建一个名为id的主键,且是自增的
    # id int primary_key auto_increment 等价于这句话
    id = models.AutoField(primary_key=True,verbose_name='用户名')
    """
    CharFiled方法参数必须指定max_length的值
    verbose_name是这个字段名的含义(解释)
    """

    # username varchar(64)
    username= models.CharField(max_length=64)

    # password int
    password = models.IntegerField()

数据库迁移命令

python3 manage.py makemigrations # 将数据写入migrations文件夹中
python3 manage.py migrate #将数据真正写入到数据库中


"""
只要修改了models.py中的代码就必须重新迁移数据
orm会自动创建主键字段,但名字固定为id
CharField字段类型必须有max_length参数
"""

字段的增删改查

#当表中已经有数据存在,如果添加新的字段需要设置null或default
password = models.IntegerField(verbose_name='密码',null=True)  # pwd int comment '密码'
age = models.IntegerField('年龄',default=18)

# 字段的增加
	1、当表中已经存在数据,可以在终端中直接给出默认值
    2、在models.py文件中添加字段时可以直接给出null=True
    # 该字段可以为空
    eg:info = models.CharFiled(max_length=32,verbose_name='个人简介',null=True)
    3、给出该字段默认值
    eg:hobby = models.CharFiled(max_length=32,verbose_name='兴趣爱好',defult='study')
# 字段的修改
	在models.py中找到你要改的类名(表)和属性(字段)直接修改即可,无论是类型和名字都一样。直接修改
    注意修改完成后一定要执行迁移数据库的 python manage.py makemigrations 和 python manage.py migrate 两条命令
# 字段的删除
	想要删除字段,直接把类里对应的属性(字段)注释掉,在执行数据库迁移两条命令即可。非常简单
    但是你删除字段后字段下的所有数据也没了	

数据的增删改查

创建表字段

models.py

from django.db import models

# Create your models here.

class User(models.Model):
    """
    User表中的username字段、password字段、register_time字段、is_delete字段
    """
    username = models.CharField(max_length=32,verbose_name='用户姓名')
    password = models.IntegerField(verbose_name='用户密码')
    # DateTimeField(auto_now=True) 默认使用当前时间
    register_time = models.DateTimeField(auto_now=True)
    is_delete = models.BooleanField(default=False)

    def __str__(self):
        return self.username

views.py

from django.shortcuts import render, redirect, HttpResponse
from app01 import models


# Create your views here.

#注册页面逻辑判断
def reg(request):
    """
    :param request:
    :return:
    接受用户输入数据
    """
    # 判断用户使用的是什么请求
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 判断用户是否存在(和用户数据做比较,查询数据库数据
        is_exists = models.user.objects.filter(name=username)
        # 如果存在返回前端页面
        if is_exists:
            return HttpResponse('用户已存在')
        models.user.objects.create(name=username, pwd=password)  # 前一个是字段名,后一个是获取带的用户输入的数据
        return redirect('/home/')
    return render(request, 'reg.html')

#查询所有用户
def home(request):
    user_data = models.user.objects.all()
    return render(request, 'home.html', locals())

# 用户修改数据逻辑判断
def user_update(request, edit_id):
    # edit_id = request.GET.get('edit_id')
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 判断用户是否存在将修改的数据写入数据库中
        models.user.objects.filter(id=edit_id).update(name=username, pwd=password)
        return redirect('/home/')

    edit_obj = models.user.objects.filter(id=edit_id).first()
    return render(request, 'user_update.html', locals())

#用户删除
def data_delete(request, delete_id):
    # 获取用户需要删除的数据主键值
    # delete_id = request.GET.get('delete_id')
    # 利用orm删除即可
    models.user.objects.filter(id=delete_id).delete()
    # 再次返回数据展示页
    return redirect('/home/')

 # 1、物理删除
    # models.User.objects.filter(id=delete_id).delete()
    # return redirect('/home/')

    # 2、软删除
    models.User.objects.filter(id=delete_id).update(is_delete=True)
    return redirect('/home/')

总结

username = request.POST.get('username')
password = request.POST.get('password')
# 增加数据
# 第一种方法
obj = models.User.objects.create(username=username,password=password)
# 第二种方法
obj = models.User(username=username,password=password)
obj.save()

# 删除数据
# 第一种方法 物理删除
obj = models.User.objects.filter(username=username).delete()
# 第二种方法 软删除
obj = models.User.objects.filter(username=username).update(is_delete=True)

# 修改数据
obj = models.User.objects.filter(username=username).update(age=age)

# 查找数据
# 查找单个
obj = models.User.objects.filter(username=username).all()
# 查找全部
obj = models.User.objects.all()

ORM外键创建

一对多外键关系  
	"""在orm中 外键字段建在多的一方"""
多对多外键关系
	"""在orm中 可以直接写在查询频率较高的表中(自动创建第三张表)"""
一对一外键关系
	"""在orm中 直接写在查询频率较高的表中"""
    
    
class book(models.Model):
    """
    书和作者是多对多的关系
    """
    name = models.CharField(max_length=32,verbose_name='书名')
    title = models.CharField(max_length=32,verbose_name='书标题')

    # 出版者和书是多对一的关系,可以用外键来代替
    pulish = models.ForeignKey(to='pulish')

    # 书和作者多对多关系
    author = models.ManyToManyField(to='author')

class author(models.Model):
    """
    作者
    """
    author_name = models.CharField(max_length=32,verbose_name='作者姓名')
    # 作者与作者详情是一对一的关系
    author_entro = models.OneToOneField(to='author_entros')
"""
ForeignKey OneToOneField  会自动给字段加_id后缀
"""
class pulish(models.Model):
    """
    出版社
    """
    pulish_name = models.CharField(max_length=32,verbose_name='出版社名称')
    pulish_addr = models.CharField(max_length=32,verbose_name='出版社地址')
    pulish_phone = models.CharField(max_length=32,verbose_name='出版社电话')

class author_entros(models.Model):
    """
    作者详情
    """
    phone = models.BigIntegerField(verbose_name='作者联系方式')
    addr = models.CharField(max_length=32,verbose_name='作者住址') 
    
    
    
 
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:13:24  更:2021-11-28 11:15:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:49:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码