Reputation: 4979
For the SQL statement, I want to do an OR filter only if the input variable is not None.
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))
But this is not possible. The 2nd query became an AND statement instead.
I don't want to do this because I don't want to compare an input variable if it's null or empty string.
query = query.filter(or_(Table.field1 == var_1, Table.field2 == var_2))
How do I solve this?
Upvotes: 7
Views: 8616
Reputation: 473863
You can dynamically construct the "OR" part:
query = session.query(Table)
conditions = []
if abc:
conditions.append(Table.field1 == abc)
if def:
conditions.append(Table.field2 == def)
query = query.filter(or_(*conditions))
Also note that the def
is a reserved word in Python, consider renaming this variable.
Upvotes: 26