Sqlalchemy:使用多个filter() - 调用生成OR子句

cha*_*rno 8 sqlalchemy

我是sqlalchemy的新手,可以使用一些帮助.我正在尝试编写一个小应用程序,我必须动态更改select语句.所以我这样做s = select([files]),然后我添加过滤器s = s.where(files.c.createtime.between(val1, val2)).这很好用,但只能使用AND-conjunction.因此,当我想要所有条目时createtime (between 1.1.2009 and 1.2.2009) OR createtime == 5.2.2009,我遇到的问题是我不知道如何使用不同的过滤器调用来实现这一点.由于程序逻辑,它不可能使用s= s.where(_or(files.c.createtime.between(val1, val2), files.c.createtime == DateTime('2009-02-01')))

谢谢你,Christof

Ant*_*sma 26

您可以从列表动态构建或子句:

clauses = []
if cond1:
    clauses.append(files.c.createtime.between(val1, val2))
if cond2:
    clauses.append(files.c.createtime == DateTime('2009-02-01'))
if clauses:
    s = s.where(or_(*clauses))
Run Code Online (Sandbox Code Playgroud)