欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

代碼伺候:

先看如下代碼:

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

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

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

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

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

來看一個QuerySet對象:

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

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

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

正確寫法如下:

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

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

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

filter返回的QuerySet:

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

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

get會報錯

Book matching query does not exist.

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

<QuerySet []>`

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

判斷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的時候,輸入的參數(shù)卻是str的時候會報錯:

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

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

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

輸出為:<QuerySet []>

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

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

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()(即對QuerySet操作)時踩的坑就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解

    使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解

    這篇文章主要介紹了使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解,該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機器學習模型、構建、配置和訓練它,最后解釋結果,即混淆矩陣,需要的朋友可以參考下
    2022-06-06
  • Python?__all__變量用法示例詳解

    Python?__all__變量用法示例詳解

    這篇文章主要介紹了Python?__all__變量用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Python Web程序搭建簡單的Web服務器

    Python Web程序搭建簡單的Web服務器

    這篇文章主要介紹了Python Web程序搭建簡單的Web服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • PyQt QCombobox設置行高的方法

    PyQt QCombobox設置行高的方法

    今天小編就為大家分享一篇PyQt QCombobox設置行高的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 基于nexus3配置Python倉庫過程詳解

    基于nexus3配置Python倉庫過程詳解

    這篇文章主要介紹了基于nexus3配置Python倉庫過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python 中的單分派泛函數(shù)你真的了解嗎

    Python 中的單分派泛函數(shù)你真的了解嗎

    singledispatch是標準庫functools模塊的函數(shù) 可以把整體方案拆成多個模塊,甚至可以為你無法修改的類提供專門的函數(shù),使用@singledispatch裝飾的函數(shù)會變成泛函數(shù),本文帶領大家再次學習Python 中的單分派泛函數(shù),一起學習下吧
    2021-06-06
  • django框架auth模塊用法實例詳解

    django框架auth模塊用法實例詳解

    這篇文章主要介紹了django框架auth模塊用法,結合實例形式詳細分析了Django框架auth模塊登錄驗證、注銷等基本操作技巧與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • pytorch 調整某一維度數(shù)據(jù)順序的方法

    pytorch 調整某一維度數(shù)據(jù)順序的方法

    今天小編就為大家分享一篇pytorch 調整某一維度數(shù)據(jù)順序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • el-table 多表格彈窗嵌套數(shù)據(jù)顯示異常錯亂問題解決方案

    el-table 多表格彈窗嵌套數(shù)據(jù)顯示異常錯亂問題解決方案

    使用vue+element開發(fā)報表功能時,需要列表上某列的超鏈接按鈕彈窗展示,在彈窗的el-table列表某列中再次使用超鏈接按鈕點開彈窗,以此類推多表格彈窗嵌套,本文以彈窗兩次為例,需要的朋友可以參考下
    2023-11-11
  • python 實現(xiàn)一次性在文件中寫入多行的方法

    python 實現(xiàn)一次性在文件中寫入多行的方法

    今天小編就為大家分享一篇python 實現(xiàn)一次性在文件中寫入多行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論