Python資料庫查詢之組合條件查詢 F Q查詢

2021-09-11 11:33:44 字數 1596 閱讀 9767

f查詢(取字段的值)

關於查詢我們知道有

filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分組,還會用到aggregate和annotate,甚至還有萬能的雙下劃線,但是如果有這樣乙個需求,查詢a表中的aa欄位數值大於b表中bb欄位數值,應該怎麼做呢,django提供乙個f表示式來支援這種操作

首先應該匯入模組:

from django.db.models import f

a.objects.filter(aa__gt=f('bb'))

再舉乙個簡單的例子,修改表中的值,為每乙個

a表中的price欄位的值,加20

a.objects.all().update(price=f('price')+20)

如果沒有

f 物件,這種需求是無法實現

django支援對f()物件進行加、減、乘、除、取模、冪計算等操作

f()括號中還支援雙下劃線進行連表查詢,f()返回的結果不一定是數字,也可以是字串,比如

from django.db.models import f

a.objects.filter(name=f('b__name'))

q查詢,相比f查詢,q組合查詢應用十分廣泛,甚至你的查詢只需要乙個filter和q,就夠了

需匯入

from django.db.models import q本來

filter( ) 方法中的關鍵字,都是按『與』的關係進行查詢的,如果你需要 『或』 的關係,你就得用q了

q物件用於封裝一組關鍵字引數,這些關鍵字引數就可以作為filter()的引數

重點是

q物件可以使用 | 或者 & 連線成乙個新的q物件,還支援用 ~ 符號取反

需要注意

q物件可以和其他關鍵字引數一起作為filter的引數

,但是q物件必須放在乙個位置

示例:查詢

a表中id大於4,以『張』開頭,或者**大於10000的資料

a.objects.filter((q(name__startwith='張'),q(id__gt=4))|q(price__gt=1000))

延伸: 因為

filter接收的引數是關鍵字引數,所以在實際專案應用中,我們可以單獨處理這個關鍵字引數,比如寫成乙個字典dict,然後filter(**dict)就可以應用我們寫在字典中的引數了

如果是

q物件,就不用**了

用q物件做字典的元素時,如果是『或』的關係,需要這樣寫

con = q()

con.connector ='or'

key = ......

val = .......

dict =

data_list = a.objects.filter(**dict).filter(con)

想要學習前端開發的同學,可以**:

543627393 學習哦!

資料庫組合查詢

在使用資料庫的過程中,資料的查詢是使用最多的,所以,資料的精確查詢是乙個很重要的問題。以前的資料查詢是最簡單的資料查詢,也從來沒想過組合查詢的問題,可是在做機房收費系統的時候,遇到了乙個很大的問題,當三個條件隨意組合的時候,會出現7中組合情況。具體問題,見下圖 首先,當連線資料庫時,必須要用到查詢條...

MySQL資料庫 組合查詢

這一次說下如何利用union操作符實現組合查詢,即將多條select語句組合成乙個結果集。我們目前每次使用資料庫查詢都是用單個select來用的,但是mysql也允許執行多個查詢,就是說多個select,但是是乙個結果集。這樣的組合查詢稱為並 union 也叫復合查詢。有兩種情況,我們需要用到組合查...

資料庫組合查詢和模糊查詢

搜尋條件 排序 得到所有捲菸 param is promote 0表示是 1表示捲菸列表 param pricevalues 排序 1 降序,2公升序 param price 批發價 預設為 不限 param cigarettefactory 菸廠 預設為 不限 param activity 活動 ...