@REDkiy

Как построить запрос SQLAlchemy, чтоб при значении None фильтра выдавались все строки таблицы?

Есть несколько переменных.
a = 23
b = 45
c = 67

Делаю вот такой запрос:
query_result = User.query.filter(User.id == a, User.group == b, User.key == c).all()

Вопрос: Необходимо, чтоб при отсутствии переменной a или при a = None выполнялся запрос такого вида:
query_result = User.query.filter(User.group == b, User.key == c).all()

То есть выдавались строки со всеми возможными User.id.
Возможно ли обойтись без конструкции if ... elif ... else и нескольких разных запросов?
  • Вопрос задан
  • 1066 просмотров
Решения вопроса 1
DDDsa
@DDDsa
from sqlalchemy import or_

query_result = User.query.filter(or_(a == None, User.id == a),
                                 or_(b == None, User.group == b),
                                 or_(c == None, User.key == c))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@REDkiy Автор вопроса
Сделал так:
1. Создал объект запроса.
query_result = User.query
2. С помощью конструкции if добавляю фильтры и переопределяю запрос, чтоб наложить цепочку фильтров.
if a not None:
    query_result = query_result.filter(User.id == a)
if b not None:
    query_result = query_result.filter(User.group == b)
if c not None:
    query_result = query_result.filter(User.key == c)

3. Получаю из базы данные.
query_result = query_result.all()

Нужна конструктивная критика данного подхода.
Ответ написан
Комментировать
@Firik67
Middle PHP Developer
Если это код функции, то добавьте параметр a=None. Что то вроде
def func(a=None):
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы