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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM