色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

淺談在django中使用filter()(即對QuerySet操作)時踩的坑

瀏覽:8日期:2024-10-14 14:09:49

代碼伺候:

先看如下代碼:

例1:

  message = Message.objects.filter(pk=message_id2) message[0].id = message_id2 message[0].content = content2 message[0].message_type = message_type2print(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對象:

淺談在django中使用filter()(即對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()

補充知識:Django filter和get的個人體會

開發環境:Ubuntu16.04+Django 1.11.9+Python2.7

filter返回的QuerySet:

filter返回的是QuerySet,可以切片以及遍歷,get則不行.因為get只能獲取唯一存在的數據,不存在或者存在多條都會報錯.

在沒有符合條件的值的時候:

get會報錯

Book matching query does not exist.

filter則返回一個空列表,并不會報錯.

<QuerySet []>`

繼續往下執行代碼

判斷filter是否有值的時候:

book_info = Book.objects.filter(id=book_id, request_type=2)

queryset.exists()if book_info.exists():

queryset.count==0:if queryset.count>0: passelse: pass

if queryset:if queryset: passelse: pass

filter也會有報錯的情況:

filter字段類型為int的時候,輸入的參數卻是str的時候會報錯:

invalid literal for int() with base 10: ’Yu’

使用get的時候,錯誤信息與上面filter一致.

filter字段存在,但是filter不到對應值的時候:

輸出為:<QuerySet []>

為空的時候,自然也不能[0],取值.

使用filter作為過濾條件更新數據的時候:

Book.objects.filter(id=book_id, request_type=2).order_by('-time')[0].update(result=note)

會報錯:

’Book’ object has no attribute ’update’

使用filter不能部分更新,必須更新所有符合條件的.

但是可以使用[0]可以獲取符合過濾條件的第一個值,

解決辦法,使用save():

book_info = Book.objects.filter(id=book_id, request_type=2).order_by('-time')[0]book_info.result = notebook_info.save()

filter 字段后常見的

這里是雙下劃線,__

__gt 大于__gte 大于等于__lt 小于__lte 小于等于__contains 包含 __icontains 包含 忽略大小寫 __startswith 以...開頭__istartswith 以...開頭 忽略大小寫__endswith 以...結尾__iendswith 以...結尾,忽略大小寫

以上這篇淺談在django中使用filter()(即對QuerySet操作)時踩的坑就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 怡红院免费全部视频在线 | 免费观看欧美成人禁片 | 欧美三级免费网站 | 久久中文字幕日韩精品 | 国产精品亚洲精品久久成人 | 加勒比在线免费视频 | 国产视频久久 | 久久不见久久见免费影院www日本 | 亚洲成人免费视频 | 免费高清一级欧美片在线观看 | 国产成人亚洲精品77 | 在线观看国产一区 | 久久99精品久久久久久野外 | 亚洲成人偷拍 | 成人午夜私人影院入口 | 视频一区视频二区在线观看 | 色在线网站免费观看 | 女人张开双腿让男人桶爽免 | 草久在线播放 | 亚洲精品m在线观看 | 黄色美女视频免费看 | 日韩欧美国产成人 | 亚洲永久免费 | 久久久美女视频 | 欧美成人午夜毛片免费影院 | 香港aa三级久久三级老师 | 国产v欧美v日韩在线观看 | 中文字幕乱码无线码在线 | 欧美一级毛片免费播放器 | 加勒比久久综合 | 欧美大片欧美毛片大片 | 成人a级高清视频在线观看 成人a毛片 | 欧美高清视频在线 | 国产最新网站 | 一级毛片免费在线播放 | 欧毛片| 国产精品李雅在线观看 | 女人张腿让男桶免费视频网站 | 国产成人综合精品一区 | 亚洲人成网站观看在线播放 | 国内精品久久影院 |