久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:6日期: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中讀取數(shù)據(jù),并打印出來(lái),無(wú)誤。可是無(wú)法將數(shù)據(jù)同步到數(shù)據(jù)庫(kù)中。

(1)all()返回的是QuerySet對(duì)象,程序并沒(méi)有真的在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句查詢數(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ì)象,類(lèi)型為列表,說(shuō)明使用get方法會(huì)直接執(zhí)行sql語(yǔ)句獲取數(shù)據(jù)。

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

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

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

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

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

正確寫(xiě)法如下:

要想同步到數(shù)據(jù)庫(kù)中,需使用對(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ì)

開(kāi)發(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ò).

在沒(méi)有符合條件的值的時(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: passelse: pass

if queryset:if queryset: passelse: pass

filter也會(huì)有報(bào)錯(cuò)的情況:

filter字段類(lèi)型為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作為過(guò)濾條件更新數(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]可以獲取符合過(guò)濾條件的第一個(gè)值,

解決辦法,使用save():

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

filter 字段后常見(jiàn)的

這里是雙下劃線,__

__gt 大于__gte 大于等于__lt 小于__lte 小于等于__contains 包含 __icontains 包含 忽略大小寫(xiě) __startswith 以...開(kāi)頭__istartswith 以...開(kāi)頭 忽略大小寫(xiě)__endswith 以...結(jié)尾__iendswith 以...結(jié)尾,忽略大小寫(xiě)

以上這篇淺談在django中使用filter()(即對(duì)QuerySet操作)時(shí)踩的坑就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 亚洲影视一区 | 国产欧美精品区一区二区三区 | 亚洲国产精品一区二区三区 | av高清在线免费观看 | 在线99| 中文字幕在线观看www | 亚洲 欧美 自拍偷拍 | 国产日韩欧美视频 | 国产成人免费视频网站视频社区 | 亚洲啊v | 老司机午夜免费精品视频 | 成人作爱视频 | 国产精品第一国产精品 | 在线观看国精产品二区1819 | 久久精品无码一区二区三区 | 欧美日韩国产精品 | 超碰操 | 日韩久久网 | 成年人在线观看 | www.99精品 | 欧洲尺码日本国产精品 | 五月婷婷激情 | 国产精品美女久久久久久不卡 | 亚洲欧美日韩另类精品一区二区三区 | 精品久久久久国产 | 三级黄色片在线 | 国产精品久久久久久一级毛片 | av国产精品毛片一区二区小说 | 中文字幕亚洲一区二区三区 | 国产精品一二 | 欧美日韩高清 | 综合久久综合 | 国产无套一区二区三区久久 | 人人99| 中文字幕av网| 欧美日韩国产一区二区在线观看 | 免费中文字幕 | 欧美日韩在线免费 | 国产高清在线精品一区二区三区 | 久久综合中文字幕 | 九九在线视频 |