Django---orm操作

django的orm操作

对象映射关系

  类  >>>  表

  对象 >>> 一条数据

  对象中的属性 >>> 数据中的字段

首先需要在应用下的models.py中书写模型类
        class User(models.Model):
            # 将id字段设置为User表主键字段  在django orm中 你可以不写主键字典  django会默认给你的表创建一个名为id的主键字段
            # id = models.AutoField(primary_key=True)  # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了
            username = models.CharField(max_length=32)  # username varchar(32)   CharField必须要指定max_length参数
            password = models.IntegerField()  # password int
    *************************需要执行数据库迁移(同步)命令******************************
    python3 manage.py makemigrations  # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据
    python3 manage.py migrate  # 将数据库修改记录 真正同步到数据库
    注意:只要动了models中跟数据库相关的代码 就必须重新执行上面的两条命令 缺一不可(******)

表字段的增加和删除

增
            当一张表已经创建出来之后 后续还想添加字段,可以有两种方式
                1.给新增的字段设置默认值
                    addr = models.CharField(max_length=32,default='China')  # default该字段默认值

                2.给新增的字段设置成可以为空
                        age = models.IntegerField(null=True)  # 该字段允许为空
                
                
        删(慎用)
            删除字段 直接在models.py中注释该字段 然后重新执行两条命令即可
            注意:执行完之后 表中该字段所对应的所有的数据全部删除
            并且一般情况下 基本是不会用到真正意义上的删除

数据的查

from app01 import models
        
        models.User.objects.all()  # 直接拿所有的数据
        
        models.User.objects.get(username=username)  # get不推荐使用,如果没有该条数据时会报错
        
        res = models.User.objects.filter(username=username)  # 使用filter,没有该条数据的时候就是一个空列表
    # 使用filter得到是个queryset对象,我们在这就把他理解为一个列表,列表里面都是一个一个数据对象,
    因为得到是一个列表我们就可以进行索引取值,但是不推荐使用索引取值,因为在这的索引不支持负数索引,我们就无法取到最后一位
    
        res.query  # 使用queryset对象.query  能够得到查询的sql语句
        
        user_obj = res.first()  # first 就是去queryset列表中的第一个值,内部也是一个索引取值

数据的增

数据的增
        1.
        models.User.objects.create(username=username,password=password)

# create方法能够新增数据 并且有一个返回值
# 返回值就是新增的数据对象本身
    2. user_obj = models.User(username=username,password=password) user_obj.save()

数据的改和删

删
        models.User.objects.filter(条件).delete()
    
改
        models.User.objects.filter(条件).update()
"""
filter拿到是一个列表 filter操作其实都是批量操作
如果filter结果列表中有多个数据 那么会一次性全部修改
类似于for循环一个个修改

"""

 

其实改还有另一种方法

edit_obj = models.User.objects.filter(id=edit_id).first()
edit_obj.username = username
        edit_obj.password = password
        edit_obj.save()

这种方法不推荐使用,效率极低,因为他会将所有字段都进行一个更新

而update只会讲需要更新的字段进行更新

<script>alter(123)</script>

原文地址:https://www.cnblogs.com/asdaa/p/11529118.html