Установка и подключение
| Команда / Код | Описание |
pip install sqlalchemy | Установка SQLAlchemy |
pip install pymysql | Драйвер для MySQL |
create_engine(url) | Создание движка подключения |
Base.metadata.create_all(engine) | Создание всех таблиц в БД |
Модели
| Код | Описание |
class Base(DeclarativeBase) | Создание базового класса для моделей |
class Model(Base) | Определение модели (таблицы) |
__tablename__ = 'name' | Имя таблицы в БД |
id: Mapped[int] = mapped_column(primary_key=True) | Первичный ключ |
name: Mapped[str] = mapped_column(String(50), nullable=False) | Строка, обязательное поле |
price: Mapped[Decimal] = mapped_column(Numeric(10, 2)) | Числовое поле с фиксированной точностью |
ForeignKey('table.id') | Внешний ключ |
relationship("Model", back_populates="attr") | Связь ORM |
Сессия
| Код | Описание |
with Session(engine) as session: | Открыть сессию с автоматическим закрытием |
session.add(obj) | Добавить объект в сессию |
session.add_all([...]) | Добавить несколько объектов |
session.commit() | Зафиксировать изменения в БД |
session.rollback() | Откатить незафиксированные изменения |
session.delete(obj) | Пометить объект на удаление |
session.close() | Закрыть сессию вручную, если не используется контекстный менеджер |
Запросы (SQLAlchemy 2.x)
| Код | Описание |
session.scalars(select(Model)).all() | Все ORM-объекты |
session.get(Model, pk) | По первичному ключу |
select(Model).where(Model.field == val) | WHERE условие |
select(Model).order_by(Model.field) | Сортировка ASC |
select(Model).order_by(desc(Model.field)) | Сортировка DESC |
select(...).group_by(Model.field) | GROUP BY |
select(...).having(condition) | HAVING (после GROUP BY) |
select(Model).join(Model2) | INNER JOIN |
select(Model).outerjoin(Model2) | LEFT OUTER JOIN |
select(...).subquery() | Создать подзапрос |
.first() | Первый результат или None |
.one() | Ровно один; исключение при 0 или 2+ |
.scalar() | Первое значение первой строки |
Агрегирующие функции (func)
| Функция | SQL | Описание |
func.count(col) | COUNT | Количество записей |
func.sum(col) | SUM | Сумма значений |
func.avg(col) | AVG | Среднее значение |
func.max(col) | MAX | Максимальное значение |
func.min(col) | MIN | Минимальное значение |
Выражения фильтрации
| Метод | SQL | Пример |
.like('A%') | LIKE | Имена, начинающиеся на A |
.between(2, 4) | BETWEEN | id от 2 до 4 |
.in_(list) | IN | Значение из списка |
and_(...) | AND | Несколько условий AND |
or_(...) | OR | Одно из условий OR |
not_(...) | NOT | Отрицание условия |
Git — ветки для задания
| Команда | Описание |
git checkout -b lesson/08-summary-2 | Создать ветку |
git add . | Добавить файлы |
git commit -m "feat: урок 08" | Коммит |