【发布时间】:2014-09-22 23:57:14
【问题描述】:
有人知道如何在 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));
有人可以建议如何实现吗?
谢谢!
【问题讨论】:
-
OP,你最终找到解决方案了吗?
标签: python sql sqlalchemy