zoukankan      html  css  js  c++  java
  • django中使用filter()(即对QuerySet操作)时踩的坑

    代码伺候:

      先看如下代码:

    例1:

             message = Message.objects.filter(pk=message_id2)
    
                message[0].id = message_id2
                message[0].content = content2
                message[0].message_type = message_type2
           print(message[0].id)
           print(message[0].content)
    
                message[0].save()
    

      可正常从QuerySet中读取数据,并打印出来,无误。可是无法将数据同步到数据库中。

      

          (1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

             例如有Book表,其包含bookname,booknum两个属性, 如何使用Objects.all(),得到bookname和booknum的值

     (2)filter() 返回的是QuerySet对象,与all()相似,只是all()是查询所有数据,常用:filter表示‘ = ’,exclude表示’ != ’。

       (3)get()返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。

      

      来看一个QuerySet对象:

      

      message = Message.objects.filter(pk=message_id2)

       message[0].content

      这样子确实可以读取到QuerySet中的数据,可是对QuerySet修改后的数据无法保存到数据库。

      例1中不要尝试通过message.save()的方式去同步数据到数据库,因为QuerySet不存在save()方法。

           正确写法如下: 

        要想同步到数据库中,需使用对象进行数据同步操作。

    例2:

           message = Message.objects.filter(pk=message_id2).first()
    
               
                message.id = message_id2
                message.content = content2
                message.message_type = message_type2
                message.save()
    
  • 相关阅读:
    用互不相同的fib数列的数分解任意整数。
    2015 初赛TG 错题解析
    【模板】判断二叉查找树
    【初赛】完善程序题解题技巧 && 近六年PJ完善程序真题解析
    [NOIP 2012普及组 No.2] 寻宝
    [NOIP 2012普及组 No.1] 质因数分解
    [NOIP 2013普及组 No.4] 车站分级
    [NOIP 2013普及组 No.3] 小朋友的数字
    [NOIP 2013普及组 No.2] 表达式求值
    [NOIP 2013普及组 No.1] 计数问题
  • 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12583783.html
Copyright © 2011-2022 走看看