sqlalchemy如何在OR操作中使用AND? [英] sqlalchemy how to using AND in OR operation?
本文介绍了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仍然是这样的:
the query sql still like this:
SELECT *
FROM tbl_member
WHERE member_type==1 AND member_status==1 OR member_type==2 AND member_status==2
我应该怎么做?
推荐答案
查询在语义上是相同的,因为AND
的优先级高于OR
,因此
WHERE Cond1 AND Cond2 OR Cond3 AND Cond4
将产生与
相同的结果
WHERE (Cond1 AND Cond2) OR (Cond3 AND Cond4)
.
The query is semantically the same because AND
has precedence over OR
, therefore
WHERE Cond1 AND Cond2 OR Cond3 AND Cond4
will produce the same result as
WHERE (Cond1 AND Cond2) OR (Cond3 AND Cond4)
.
如果您尝试另一种方法(在代码中切换or_
和and_
),您会注意到sqlalchemy
确实会产生括号.
Were you to try the other way around (switch or_
and and_
in your code), you would notice that sqlalchemy
does generate parenthesis.
这篇关于sqlalchemy如何在OR操作中使用AND?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文