有人知道如何在SQLAlchemy中生成嵌套的联结吗?
我有一些类似于下面的Python代码:
import sqlalchemy as sa
a = sa.and_(mytable.col1 > 1, mytable.col2 < 3)
b = sa.and_(mytable.col1 < 1, mytable.col4 == None)
clause_args = [a, b]
or_clauses = sa.or_(*clause_args)
session.query(mytable).filter(mytable.status.in_([1,2,3,4])).filter(or_clauses)
注意,以下只是一些伪代码,用于演示我遇到的语法问题。 不要太多分析查询逻辑。 我只想找到一种在AND和OR块周围添加括号的方法。 SQLAlchemy生成类似于此的SQL:
SELECT
id, status, name, col1, col2, col3, col4
FROM mytable
WHERE
status in (1,2,3,4)
AND (col1 > 1
AND col2 < 3
OR col1 < 1
AND col4 is NULL);
请注意,AND条件在OR之间的逻辑AND块周围没有括号:
AND (col1 > 1
AND col2 < 3
OR col1 < 1
AND col4 is NULL);
我希望在使用or_和and_连接符时强制使用括号过滤条件。
我希望将条件用括号括起来,以便SQL输出如下:
SELECT
id, status, name, col1, col2, col3, col4
FROM mytable
WHERE
status in (1,2,3,4)
AND ((col1 > 1
AND col2 < 3)
OR (col1 < 1
AND col4 is NULL));
有没有人能够建议如何实现这一点?
谢谢!