Операторы для фильтрации в SQLAlchemy ORM

SQLAlchemy ORM: операторы для фильтрации

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): эти операторы особенно полезны при выполнении поиска по строковым значениям. LIKE учитывает регистр, в то время как ILIKE (доступен только в PostgreSQL) — нет.
session.query(User).filter(User.name.like('%jo%'))
  • ILIKE — идеальный выбор для регистронезависимого поиска.
session.query(User).filter(User.name.ilike('%jo%'))

Операторы Nullability

  • 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 предлагает обширный набор операторов для фильтрации, что позволяет разработчикам настраивать запросы максимально точно. Благодаря этому, вы можете получать только те данные, которые действительно необходимы для вашего приложения, оптимизируя работу с базой данных.

Содержание: