sqlalchemy如何在OR操作中使用AND?
我需要执行这个查询:
SELECT *
FROM tbl_member
WHERE (member_type==1 AND member_status==1)
OR (member_type==2 and member_status==2)
我试过:
q=session.query(tbl_member) \
.filter(or_(and_(tbl_member.member_type==1,tbl_member.member_status==1), \
and_(tbl_member.member_type==2,tbl_member.member_status==2)))
还有
q=session.query(tbl_member) \
.filter(or_((and_(tbl_member.member_type==1,tbl_member.member_status==1)), \
(and_(tbl_member.member_type==2,tbl_member.member_status==2))))
但是查询的SQL还是这样:
SELECT *
FROM tbl_member
WHERE member_type==1 AND member_status==1 OR member_type==2 AND member_status==2
我该怎么做呢?
1 个回答
10
这个查询在语义上是一样的,因为在逻辑运算中,AND
的优先级高于OR
。所以,
WHERE Cond1 AND Cond2 OR Cond3 AND Cond4
和
WHERE (Cond1 AND Cond2) OR (Cond3 AND Cond4)
产生的结果是一样的。
如果你反过来试试(在你的代码中把or_
和and_
调换),你会发现sqlalchemy
确实会生成括号。