python web-django之ORM多條件查詢Q

前言

django自帶的ORM功能很強大,提供多種查詢數據的方式。filter 等方法中的關鍵字參數查詢都是一起進行“AND” 的。 如果你需要執行更復雜的查詢(例如OR 語句),可以使用Q對象。

python web-django之ORM多條件查詢Q


使用

1、導入Q對象

from django.db.model import Q

Q 對象可以使用c&(AND)和|(OR)操作符組合起來。

當一個操作符在兩個Q 對象上使用時,它產生一個新的Q 對象。

2、例子

Q(question__startswith='Who') | Q(question__startswith='What')

等同於SQL語句

WHERE question LIKE 'Who%' OR question LIKE 'What%'

3、如果一個查詢函數有多個Q 對象參數(逗號隔開的),這些參數的邏輯關係為“AND"。

Poll.objects.get(

Q(question__startswith='Who'),

Q(pub_date=date(2018, 5, 29)) | Q(pub_date=date(2018, 5, 30))

)

#等同於下列SQL語句:

SELECT * from polls WHERE question LIKE 'Who%'

AND (pub_date = '2018-05-29' OR pub_date = '2018-05-30')

4、Q 對象可以使用~ 操作符取反,這允許組合正常的查詢和取反(NOT) 查詢:

Q(question__startswith='Who') | ~Q(pub_date__year=2017)

5、查詢函數可以混合使用Q對象和關鍵字參數。所有提供給查詢函數的參數(關鍵字參數或Q 對象)都將"AND”在一起。但是,如果出現Q 對象,它必須位於所有關鍵字參數的前面。例如

Poll.objects.get(

Q(pub_date=date(2018, 5, 29)) | Q(pub_date=date(2018, 5, 30))

question__startswith='Who'

#下列是不合法的查詢條件

Poll.objects.get(

question__startswith='Who',

Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))


總結

django可以快速完成任務!人生苦短,我用Python!

python web-django之ORM多條件查詢Q


分享到:


相關文章: