【问题标题】:SQLAlchemy - adding OR condition with different filterSQLAlchemy - 使用不同的过滤器添加 OR 条件
【发布时间】:2016-01-17 12:28:58
【问题描述】:

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

例如

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

我该如何解决这个问题?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    您可以动态构造“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 中的保留字,请考虑重命名此变量。

    【讨论】:

    • 嗯,不错,or_ 可以正确处理单个滤芯,非常方便
    • 如果您的条件可能为零,请使用or_(False, *conditions)。由于 sqlalchemy 1.4 or_ 必须至少有一个参数,正如它所说的 here
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多