SqlAlchemy或_包含多部分子句

时间:2016-09-09 03:59:07

标签: python sqlalchemy

我有一个独立条款列表,如下所示:

'cls.status = :status_1 AND cls.password_valid = 0'
'cls.status = :status_1 AND cls.reason = :reason_1'
...

我想将它们添加到sqlalchemy中的where子句

使用query = query.filter(or_(*clauses))告诉我,我应该将它们(在where子句中)读作:

WHERE ...
AND ((tbl1.status = :status_2 AND tbl1.password_valid = 0)
     OR (tbl1.status = :status_3 AND tbl1.reason = :reason_1))

出于某种原因,当我向查询添加multipart子句时,它将它们视为单个部分,而我得到了这个:

WHERE ...
AND (tbl1.status = :status_2 AND tbl1.password_valid = 0 
     OR tbl1.status = :status_3 AND tbl1.reason = :reason_1)

这与我的期望并不相同。如何让它围绕正在进行OR的多部分子句引入parens?我找到的所有例子都是单个子句语句,因为它们可以正常工作

1 个答案:

答案 0 :(得分:0)

使用or_,您必须将内容包装在以逗号分隔的数据中。

query.filter(or_( something == 'this', something == 'that' ) )

如果要将子句与parens分开,可以使用备用按位运算符|

例如:

query.filter( (something == 'this') | (something == 'that'))