最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月31日 14:40:03   作者:小耗lhx  
這篇文章主要介紹了淺談在django中使用filter()(即對(duì)QuerySet操作)時(shí)踩的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

代碼伺候:

先看如下代碼:

例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ù),并打印出來(lái),無(wú)誤??墒菬o(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ì)象:

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:
  pass
else:
  pass
if queryset:
if queryset:
  pass
else:
  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 = note
book_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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換

    利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換

    這篇文章主要介紹了利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換,通過(guò)對(duì)將一個(gè)JSON文檔映射為Python對(duì)象問(wèn)題的展開(kāi)介紹主題內(nèi)容,需要的朋友可以參考一下
    2022-06-06
  • python實(shí)現(xiàn)矩陣乘法

    python實(shí)現(xiàn)矩陣乘法

    這篇文章主要介紹了python實(shí)現(xiàn)矩陣乘法,矩陣相乘需要前面矩陣的行數(shù)與后面矩陣的列數(shù)相同方可相乘,下面來(lái)看看python代碼的具體實(shí)現(xiàn)吧
    2022-01-01
  • django 模型中的計(jì)算字段實(shí)例

    django 模型中的計(jì)算字段實(shí)例

    這篇文章主要介紹了django 模型中的計(jì)算字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲

    python實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練

    pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練

    今天小編就為大家分享一篇pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python中如何設(shè)置list步長(zhǎng)

    python中如何設(shè)置list步長(zhǎng)

    這篇文章主要介紹了python中如何設(shè)置list步長(zhǎng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python文件的讀寫(xiě)和異常代碼示例

    Python文件的讀寫(xiě)和異常代碼示例

    這篇文章主要介紹了Python文件的讀寫(xiě)和異常代碼示例,首先分享了文件讀寫(xiě)的簡(jiǎn)單方法,然后略為詳細(xì)地介紹了Python異常的相關(guān)內(nèi)容,不足之處,歡迎補(bǔ)充。
    2017-10-10
  • 實(shí)用自動(dòng)化運(yùn)維Python腳本分享

    實(shí)用自動(dòng)化運(yùn)維Python腳本分享

    今天小編就為大家分享一篇實(shí)用自動(dòng)化運(yùn)維Python腳本。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python中查看文件名和文件路徑

    Python中查看文件名和文件路徑

    本篇文章主要介紹了Python中查看文件名和文件路徑的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • PyQt5實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器

    PyQt5實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評(píng)論

金堂县| 抚远县| 澄江县| 延吉市| 蒙自县| 天门市| 上饶市| 延川县| 玉环县| 安仁县| 深州市| 高唐县| 纳雍县| 隆林| 友谊县| 陆河县| 如东县| 都昌县| 内江市| 安多县| 东源县| 江门市| 洪雅县| 合江县| 定安县| 抚顺市| 拜城县| 墨脱县| 石首市| 武强县| 应城市| 长沙县| 阳高县| 泊头市| 名山县| 古田县| 桦南县| 长沙市| 德清县| 麻城市| 玛曲县|