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>

  • 相关阅读:
    进程通信方式-管道pipe
    进程间通信
    信号的发送与处理
    信号应用于事件通知
    信号的屏蔽,信号集
    信号的发送kill,raise,alarm,setitimer,abort,sigqueue
    信号处理函数的返回sigsetjmp/siglongjmp
    POJ 1562 Oil Deposits
    HDU 1016 Prime Ring Problem
    HDU 1010 Tempter of the Bone
  • 原文地址:https://www.cnblogs.com/asdaa/p/11529118.html
Copyright © 2011-2022 走看看