SQLAlchemy - 使用不同的过滤器添加OR条件

时间:2016-01-17 12:28:59

标签: python sqlalchemy

对于SQL语句,我只想在输入变量不是None时才进行OR过滤。

E.g

# input variable
var_1 = "apple"
var_2 = "pear"

query = session.query(Table)
if var_1:
    query = query.filter(or_(Table.field1 == var_1))
if var_2:
    query = query.filter(or_(Table.field2 == var_2))

但这是不可能的。第二个查询改为AND语句。

我不想这样做,因为我不想比较输入变量,如果它是null或空字符串。

query = query.filter(or_(Table.field1 == var_1, Table.field2 == var_2))

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

您可以动态构建“OR”部分:

query = session.query(Table)

conditions = []
if abc:
    conditions.append(Table.field1 == abc)
if def:
    conditions.append(Table.field2 == def)

query = query.filter(or_(*conditions))

另请注意,def是Python中的保留字,请考虑重命名此变量。