将堆叠过滤器的行为更改为sqlalchemy或在sqlalchemy中

时间:2013-03-27 20:22:17

标签: python sqlalchemy

我想要以下内容:

q = db.session.query(db.models.Something).filter(a==a).filter(b==b).or().filter(c==c).filter(foo==bar)

这意味着a = a和b = b或c = c且d = d。

我强烈希望避免在过滤器调用本身中应用它。

1 个答案:

答案 0 :(得分:0)

您需要使用or_()and_()函数:

from sqlalchemy.sql import or_, and_

q = db.session.query(db.models.Something).filter(
    or_(
        and_(a==a, b==b),
        and_(c==c, foo==bar)
    ))

或者您可以使用&|运营商:

q = db.session.query(db.models.Something).filter(
    (a==a) & (b==b) | (c==c) & (foo==bar))

请参阅ConjunctionsCommon Filter Operations