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()
    
  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12583783.html
Copyright © 2011-2022 走看看