⚡ Ключевые методы
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