中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django中使用filter時遇到的問題有哪些

發布時間:2021-06-11 15:17:08 來源:億速云 閱讀:194 作者:小新 欄目:開發技術

這篇文章主要介紹了django中使用filter時遇到的問題有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

代碼伺候:

先看如下代碼:

例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對象:

django中使用filter時遇到的問題有哪些

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:
  pass
else:
  pass
if queryset:
if queryset:
  pass
else:
  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 = note
book_info.save()

filter 字段后常見的

這里是雙下劃線,__

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“django中使用filter時遇到的問題有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天长市| 镇康县| 加查县| 鄯善县| 苍南县| 永修县| 六安市| 东乌珠穆沁旗| 莱阳市| 黄大仙区| 万宁市| 彭阳县| 高州市| 芜湖市| 广州市| 尚义县| 溧水县| 齐齐哈尔市| 蕲春县| 沧州市| 平邑县| 和田县| 满城县| 弋阳县| 舞阳县| 阳城县| 收藏| 中西区| 通道| 育儿| 神农架林区| 衡阳县| 建昌县| 锡林浩特市| 车险| 台山市| 泽普县| 延津县| 伊金霍洛旗| 永昌县| 扎囊县|