django數據查詢之F查詢和Q查詢
阿新 • • 發佈:2018-11-22
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”ed26 # 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查詢