Запрос с sqlalchemy с и и или - PullRequest
       1

Запрос с sqlalchemy с и и или

0 голосов
/ 19 ноября 2018

Прежде всего, спасибо за вашу помощь.

Моя проблема в том, что я должен запросить сервер с большим количеством входных данных.Я обновляю веб-страницу, которая в прошлом принимала только один ввод, но теперь я создала флажок, чтобы пользователь мог иметь большую гибкость в запросе:

query = session.query(table_name).filter(and_(*conditions) , or_(*multiple_choice_filter))

Где множественный выбор - это список с такими буквами, как["A", "B"] А условия - это список условий:

table_name.c.column_1.op('~*')(filter_1))

В прошлом не было ничего кроме начальных условий, но теперь я хочу добавить флажок.

Кто-нибудь сейчас, как объединить в запросе условия прошлого с множественным_фильмом_фильтра?

Спасибо!

1 Ответ

0 голосов
/ 26 ноября 2018

Я нашел, как это сделать. Суть моего вопроса в том, чтобы связать И с ИЛИ.

Сначала создайте фильтры:

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 ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...