zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/asdaa/p/11529118.html
Copyright © 2011-2022 走看看