1. 程式人生 > >django數據查詢之F查詢和Q查詢

django數據查詢之F查詢和Q查詢

bject spa amp argument oge ide int sql span

僅僅靠單一的關鍵字參數查詢已經很難滿足查詢要求。此時Django為我們提供了F和Q查詢:

 1 # F 使用查詢條件的值,專門取對象中某列值的操作
 2 
 3     # from django.db.models import F
 4     # models.Tb1.objects.update(num=F(‘num‘)+1)
 5 
 6 
 7 # Q 構建搜索條件
 8     from django.db.models import Q
 9 
10     #1 Q對象(django.db.models.Q)可以對關鍵字參數進行封裝,從而更好地應用多個查詢
11     q1=models.Book.objects.filter(Q(title__startswith=
P)).all() 12 print(q1)#[<Book: Python>, <Book: Perl>] 13 14 # 2、可以組合使用&,|操作符,當一個操作符是用於兩個Q的對象,它產生一個新的Q對象。 15 Q(title__startswith=P) | Q(title__startswith=J) 16 17 # 3、Q對象可以用~操作符放在前面表示否定,也可允許否定與不否定形式的組合 18 Q(title__startswith=P) | ~Q(pub_date__year=2005) 19 20
# 4、應用範圍: 21 22 # Each lookup function that takes keyword-arguments (e.g. filter(), 23 # exclude(), get()) can also be passed one or more Q objects as 24 # positional (not-named) arguments. If you provide multiple Q object 25 # arguments to a lookup function, the arguments will be “AND”ed
26 # together. For example: 27 28 Book.objects.get( 29 Q(title__startswith=P), 30 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) 31 ) 32 33 #sql: 34 # SELECT * from polls WHERE question LIKE ‘P%‘ 35 # AND (pub_date = ‘2005-05-02‘ OR pub_date = ‘2005-05-06‘) 36 37 # import datetime 38 # e=datetime.date(2005,5,6) #2005-05-06 39 40 # 5、Q對象可以與關鍵字參數查詢一起使用,不過一定要把Q對象放在關鍵字參數查詢的前面。 41 # 正確: 42 Book.objects.get( 43 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), 44 title__startswith=P) 45 # 錯誤: 46 Book.objects.get( 47 question__startswith=P, 48 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))

參考來源:https://www.cnblogs.com/liuwchao/articles/9831942.html

django數據查詢之F查詢和Q查詢