Я просмотрел документы и не могу понять, как выполнить запрос OR в SQLAlchemy. Я просто хочу сделать этот запрос.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Должно быть что-то вроде
addr = session.query(AddressBook).filter(City == "boston").filter(????)
python
sqlalchemy
JiminyCricket
источник
источник
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))
in_
оператор следующим образом:filter(User.name.in_(['Alice', 'Bob', 'Carl']))
SQLAlchemy перегружает побитовые операторы
&
,|
и~
поэтому вместо уродливого и трудно читаемого синтаксиса префиксов с помощьюor_()
иand_()
(как в ответе Бастьена ) вы можете использовать эти операторы:Обратите внимание, что круглые скобки не являются обязательными из-за приоритета побитовых операторов.
Таким образом, весь ваш запрос может выглядеть так:
источник
&
между ними и первым (вместо использования второгоfilter
вызова) для того же эффекта?or_()
Функция может быть полезна в случае неизвестного количества компонентов запроса ИЛИ.Например, давайте предположим, что мы создаем REST-сервис с несколькими необязательными фильтрами, которые должны возвращать запись, если какой-либо из фильтров возвращает true. С другой стороны, если параметр не был определен в запросе, наш запрос не должен изменяться. Без
or_()
функции мы должны сделать что-то вроде этого:С помощью
or_()
функции его можно переписать так:источник
Это было действительно полезно. Вот моя реализация для любой таблицы:
источник