Я нашел, как это сделать. Суть моего вопроса в том, чтобы связать И с ИЛИ.
Сначала создайте фильтры:
conditions = []
для оператора and очень прост:
conditions.append(table_name.c.column_name_1.op('~*')(value_1))
conditions.append(table_name.c.column_name_2.op('~*')(value_2))
conditions.append(table_name.c.column_name_3.op('~*')(value_3))
query = session.query(table_name).filter(and_(*conditions)).order_by(table_name.c.column_name_1)
Что переводится на:
SELECT * FROM table_name WHERE (column_name_1 == value_1 AND column_name_2 == value_2 AND column_name_3 == value_3)
Теперь, чтобы связать условия с ИЛИ и И:
Мы используем две разные переменные: одну для оператора AND (точно так же, как указано выше), а другую другую, как следующую:
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_4))# First possible value for the OR statement
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_5))# Second possible value for the OR statement
filter_or_1.append(table_name.c.column_name_4.op('~*')(value_6))# Third possible value for the OR statement
и запрос будет:
query = session.query(table_name).filter(and_(*conditions) , and_(or_(*filter_or_1))).order_by(table_name.c.column_name_1)
Что переводится на:
SELECT * FROM table_name WHERE (column_name_1 == value_1 AND column_name_2 == value_2 AND column_name_3 == value_3 AND(column_name_4==value_4 OR column_name_4==value_5 column_name_4==value_6 ))