在SQLAlchemy中有条件地过滤

Jam*_*Lam 9 python sqlalchemy

有没有办法filter在SQL Alchemy ORM中有条件地为查询添加参数?

例如,想象一下,我有以下几点:

q = session.query(X)
if a:
 q.filter(X.y == 'a')
elif b:
 q.filter(X.y == 'a', X.z == 'b')
elif c:
 q.filter(X.y == 'a', X.p == 'd') 
Run Code Online (Sandbox Code Playgroud)

有没有办法说只需添加

X.z == 'b' 如果 b

无需(X.y == 'a')在每个过滤器中读取.

好像我能做到

q.filter(X.y == 'a').filter(X.y == 'b')

但这会更改正在执行的查询.

sat*_*oru 12

尝试将查询收集到列表中,然后*在调用时使用运算符filter:

queries = [X.y == 'a']
if b:
    queries.append(X.z == 'b')
q.filter(*queries)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我不明白为什么你认为链接两个filter会改变你的查询,它会X.y = a AND X.z = b像你使用时那样对应filter(X.y == 'a', X.z == 'b').

  • 太棒了!我使用这个 * 运算符有条件地将多个条件传递到 or_ 函数中 (2认同)