django中使用filter時(shí)遇到的問題有哪些-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比廣昌網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式廣昌網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋廣昌地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

代碼伺候:

先看如下代碼:

例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中讀取數(shù)據(jù),并打印出來,無誤??墒菬o法將數(shù)據(jù)同步到數(shù)據(jù)庫中。

(1)all()返回的是QuerySet對(duì)象,程序并沒有真的在數(shù)據(jù)庫中執(zhí)行SQL語句查詢數(shù)據(jù),但支持迭代,使用for循環(huán)可以獲取數(shù)據(jù)。

例如有Book表,其包含bookname,booknum兩個(gè)屬性, 如何使用Objects.all(),得到bookname和booknum的值

(2)filter() 返回的是QuerySet對(duì)象,與all()相似,只是all()是查詢所有數(shù)據(jù),常用:filter表示‘ = ',exclude表示' != '。

(3)get()返回的是Model對(duì)象,類型為列表,說明使用get方法會(huì)直接執(zhí)行sql語句獲取數(shù)據(jù)。

來看一個(gè)QuerySet對(duì)象:

django中使用filter時(shí)遇到的問題有哪些

message = Message.objects.filter(pk=message_id2)
message[0].content

這樣子確實(shí)可以讀取到QuerySet中的數(shù)據(jù),可是對(duì)QuerySet修改后的數(shù)據(jù)無法保存到數(shù)據(jù)庫。

例1中不要嘗試通過message.save()的方式去同步數(shù)據(jù)到數(shù)據(jù)庫,因?yàn)镼uerySet不存在save()方法。

正確寫法如下:

要想同步到數(shù)據(jù)庫中,需使用對(duì)象進(jìn)行數(shù)據(jù)同步操作。

例2:

message = Message.objects.filter(pk=message_id2).first()
 
   message.id = message_id2
   message.content = content2
   message.message_type = message_type2
   message.save()

補(bǔ)充知識(shí):Django filter和get的個(gè)人體會(huì)

開發(fā)環(huán)境:Ubuntu16.04+Django 1.11.9+Python2.7

filter返回的QuerySet:

filter返回的是QuerySet,可以切片以及遍歷,get則不行.因?yàn)間et只能獲取唯一存在的數(shù)據(jù),不存在或者存在多條都會(huì)報(bào)錯(cuò).

在沒有符合條件的值的時(shí)候:

get會(huì)報(bào)錯(cuò)

Book matching query does not exist.

filter則返回一個(gè)空列表,并不會(huì)報(bào)錯(cuò).

<QuerySet []>`

繼續(xù)往下執(zhí)行代碼

判斷filter是否有值的時(shí)候:

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也會(huì)有報(bào)錯(cuò)的情況:

filter字段類型為int的時(shí)候,輸入的參數(shù)卻是str的時(shí)候會(huì)報(bào)錯(cuò):

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

使用get的時(shí)候,錯(cuò)誤信息與上面filter一致.

filter字段存在,但是filter不到對(duì)應(yīng)值的時(shí)候:

輸出為:<QuerySet []>

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

使用filter作為過濾條件更新數(shù)據(jù)的時(shí)候:

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

會(huì)報(bào)錯(cuò):

'Book' object has no attribute 'update'

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

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

解決辦法,使用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 以...結(jié)尾
__iendswith 以...結(jié)尾,忽略大小寫

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“django中使用filter時(shí)遇到的問題有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:django中使用filter時(shí)遇到的問題有哪些-創(chuàng)新互聯(lián)
鏈接分享:http://muchs.cn/article0/cospoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、面包屑導(dǎo)航、網(wǎng)站導(dǎo)航、網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管