7

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?

1 Answer 1

26

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.

Sign up to request clarification or add additional context in comments.

3 Comments

Ah nice, pretty convenient that or_ can handle a single filter element properly
Use or_(False, *conditions) if you might have zero conditions. Since sqlalchemy 1.4 or_ must have at least one parameter as it says here
Nice, but can I write the code Table.field1 by using reflection? like Table['field']

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.