Skip to main content
 首页 » 编程设计

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

2025年05月04日12jackei

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

我该如何解决?

请您参考如下方法:

您可以动态构造“或”部分:

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 中的保留字,请考虑重命名此变量。