如何在Django ORM中用filter实现含AND、OR组合的SQL查询
实现对应SQL的Django ORM查询
要实现你给出的SQL查询逻辑,需要用到Django ORM的Q对象来处理复杂的OR和AND组合条件,具体实现如下:
- 首先导入
Q对象:
from django.db.models import Q
- 假设你的Django模型类名为
SampleTable(对应数据库表sample_table),使用filter方法构造查询:
SampleTable.objects.filter( istatus=1, Q(iCategory=2, iType=1) | Q(iType__in=[2, 3, 5]) )
逻辑说明
istatus=1对应SQL中的istatus = 1,多个filter参数默认是AND关系;Q(iCategory=2, iType=1)对应iCategory = 2 AND iType=1;Q(iType__in=[2,3,5])对应iType IN (2,3,5);|符号表示OR逻辑,括号的优先级和SQL一致,确保先计算OR内部的组合,再和外部的istatus=1做AND运算。
你也可以用全Q对象的写法,逻辑完全等价:
SampleTable.objects.filter( Q(istatus=1) & (Q(iCategory=2) & Q(iType=1) | Q(iType__in=[2, 3, 5])) )
内容的提问来源于stack exchange,提问作者padmaja cherukuri
相关产品推荐
相关产品推荐

