🔖 Справочник: SQLAlchemy запросы (2.x)

🎯 Все методы одним списком

⚡ Ключевые методы

  • session.add(obj) / session.add_all([...]) — добавить объекты
  • session.commit() — зафиксировать изменения
  • session.get(Model, pk) — по первичному ключу
  • session.scalars(select(Model)).all() — все записи
  • select(Model).where(условие) — с фильтром
  • select(Model).order_by(поле) — сортировка
  • session.delete(obj) — пометить на удаление

CRUD — создание и добавление

МетодОписаниеПример
session.add(obj) Добавить один объект в сессию session.add(User(name="Alice", age=30))
session.add_all(list) Добавить список объектов session.add_all([u1, u2, u3])
session.commit() Зафиксировать изменения в БД session.commit()
session.flush() Отправить SQL без COMMIT (для получения id) session.flush()
session.rollback() Откатить изменения текущей транзакции session.rollback()
session.delete(obj) Пометить объект на удаление session.delete(user)

Чтение данных — session методы

МетодОписаниеПример
session.get(Model, pk) По первичному ключу; None если нет session.get(User, 1)
session.scalars(stmt) Выполнить запрос, вернуть ScalarResult session.scalars(select(User))
session.execute(stmt) Выполнить запрос, вернуть Row-объекты session.execute(select(User))

Методы-терминаторы результата

МетодНет результатов1 результатМного
.all() [] [obj] [obj1, obj2...]
.first() None obj obj (первый)
.one() NoResultFound obj MultipleResultsFound
.one_or_none() None obj MultipleResultsFound

Построение запроса — select()

Метод/функцияОписаниеПример
select(Model) Базовый SELECT всех полей select(User)
.where(условие) Фильтр (WHERE в SQL) .where(User.age > 25)
.order_by(поле) Сортировка по возрастанию .order_by(User.age)
.order_by(desc(поле)) Сортировка по убыванию .order_by(desc(User.age))
.limit(n) Ограничить количество результатов .limit(10)
.offset(n) Пропустить первые n записей .offset(5)

Операторы фильтрации

Оператор/методОписаниеПример
== Равно .where(User.name == "Alice")
!= Не равно .where(User.age != 30)
>, <, >=, <= Сравнение .where(User.age > 25)
.like(pattern) Поиск по шаблону (% — любые символы) .where(User.name.like('A%'))
.ilike(pattern) Поиск без учёта регистра .where(User.name.ilike('alice'))
.between(a, b) Значение в диапазоне [a, b] .where(User.id.between(2, 4))
.in_(list) Значение в списке .where(User.name.in_(["Alice", "Bob"]))
.not_in(list) Значение не в списке .where(User.name.not_in(["Alice"]))
.is_(None) Равно NULL .where(User.age.is_(None))
.is_not(None) Не равно NULL .where(User.age.is_not(None))

Логические операторы

ФункцияОписаниеПример
and_(*условия) Логическое И and_(User.age > 20, User.age < 30)
or_(*условия) Логическое ИЛИ or_(User.age > 30, User.name == 'David')
not_(условие) Логическое НЕ not_(User.name == 'David')

Импорты

# Основные импорты для запросов (SQLAlchemy 2.x)
from sqlalchemy import create_engine, select, and_, or_, not_, desc
from sqlalchemy.orm import Session, DeclarativeBase, Mapped, mapped_column