SQLAlchemy ORM — это инструмент, который предоставляет богатый функционал для фильтрации данных. Эти операторы позволяют вам извлекать из базы данных только те записи, которые соответствуют определенным критериям. Давайте рассмотрим их более подробно.
session.query(User).filter(User.name == 'John')
session.query(User).filter(User.name != 'John')
session.query(User).filter(User.age > 25)
session.query(User).filter(User.age < 30)
between
): этот оператор позволяет извлекать записи на основе диапазона значений. Полезно, если вы хотите найти всех пользователей в определенном возрастном диапазоне.session.query(User).filter(User.age.between(20, 30))
in_
иnot_in_
: если у вас есть список значений и вы хотите найти записи, которые соответствуют любому из этих значений (или исключают их), используйте эти операторы.session.query(User).filter(User.name.in_(['John', 'Jane']))
session.query(User).filter(~User.name.in_(['John', 'Jane']))
LIKE
учитывает регистр, в то время как ILIKE (доступен только в PostgreSQL) — нет.session.query(User).filter(User.name.like('%jo%'))
session.query(User).filter(User.name.ilike('%jo%'))
is_null
и is_not_null
: когда вы хотите проверить, является ли значение NULL
(или не является), эти операторы придут на помощь. Они особенно полезны при работе с полями, которые могут иметь отсутствующие значения.session.query(User).filter(User.address.is_(None))
session.query(User).filter(User.address.isnot(None))
AND
: если вам нужно выполнить несколько условий одновременно, используйте AND
. Все условия должны быть истинными, чтобы результат был истинным.from sqlalchemy import and_
session.query(User).filter(and_(User.name == 'John', User.age < 30))
OR
: если хотя бы одно из условий должно быть истинным, используйте OR
.from sqlalchemy import or_
session.query(User).filter(or_(User.name == 'John', User.age < 30))
NOT
: инвертирует логическое значение условия. Позволяет отфильтровать записи, которые не соответствуют определенному условию.from sqlalchemy import not_
session.query(User).filter(not_(User.name == 'John'))
any
: особенно полезен при работе с отношениями. Позволяет проверить, есть ли хотя бы одна запись в связанной таблице, соответствующая определенному условию.session.query(User).filter(User.posts.any(Post.title == 'First Post'))
has
: аналогично any, но применяется к "many to one" отношениям. Позволяет проверить, соответствует ли связанная запись определенному условию.session.query(Post).filter(Post.author.has(name = 'John'))
SQLAlchemy ORM предлагает обширный набор операторов для фильтрации, что позволяет разработчикам настраивать запросы максимально точно. Благодаря этому, вы можете получать только те данные, которые действительно необходимы для вашего приложения, оптимизируя работу с базой данных.
Содержание: