我是sqlalchemy的新手,可以使用一些帮助。
我正在尝试编写一个小型应用程序,必须动态更改选择语句。所以我做s = select([files]),然后我通过s = s.where(files.c.createtime.between(val1, val2))添加过滤器。
这很好用,但仅在与连接时起作用。
所以,当我想让所有条目都带有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')))
提前致谢,
克里斯托夫

最佳答案

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

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))

关于SQLAlchemy:使用多个filter()-Calls产生OR-子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3618051/

10-12 22:54