sqlalchemy如何在OR操作中使用AND? [英] sqlalchemy how to using AND in OR operation?

查看:575
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆