Содержание курса
Введение
14 уроков
1.
Приветствие
↗
2.
Что такое pipx?
↗
3.
Установка pipx и основные функции
↗
4.
Руководство по pipx
↗
5.
Список полезных программ, для pipx
↗
6.
Как сделать Python-пакет совместимым с pipx
↗
7.
Введение в Poetry
↗
8.
Что такое SQL и зачем он нужен
↗
9.
Что такое ORM и зачем он нужен
↗
10.
Что такое SQLAlchemy: Core vs ORM
↗
11.
Соединение с БД: клиент-сервер, пул, pgBouncer
↗
12.
Установка окружения: Poetry, Docker, VS Code
↗
13.
Структура учебного проекта
↗
14.
Тестовые задания
↗
Основы (синхронный SQLAlchemy)
19 уроков
1.
Engine: create_engine, строка подключения, dialect
↗
2.
База данных: memory vs файл, DBeaver, WSL
↗
3.
DeclarativeBase и первая модель
↗
4.
Mapped[T] vs Annotated[T, mapped_column(...)]
↗
5.
Session: что это и зачем
↗
6.
CRUD: insert, select, update, delete (ORM)
↗
7.
CRUD: Core-стиль
↗
8.
Метод execute() и shortcuts (get, scalar, scalars)
↗
9.
scalar(), scalars(), scalar_one_or_none(), mappings()
↗
10.
values(), returning(), return_defaults()
↗
11.
Жизненный цикл объекта: transient → pending → persistent
↗
12.
Unit of Work и Identity Map
↗
13.
flush() vs commit()
↗
14.
autoflush: как работает
↗
15.
expire_on_commit
↗
16.
Состояния expired и detached
↗
17.
expire(), refresh(), expunge()
↗
18.
Транзакции: commit(), rollback(), begin(), sessionmaker()
↗
19.
Типичные ошибки: DetachedInstanceError, IntegrityError
↗
Связи между таблицами
15 уроков
1.
relationship() и back_populates: основы
↗
2.
One-to-Many
↗
3.
Many-to-One
↗
4.
One-to-One (UniqueConstraint, uselist=False)
↗
5.
Many-to-Many: secondary, ассоциативная таблица
↗
6.
Самоссылочные таблицы: remote_side
↗
7.
backref vs back_populates
↗
8.
Каскадное добавление объектов в Session
↗
9.
ondelete и onupdate управление каскадным поведением на уровне БД
↗
10.
ForeignKeyConstraint для составных ключей
↗
11.
Индексы и UniqueConstraint
↗
12.
Типичные ошибки связей
↗
13.
Примечание: кавычки в аннотациях типов
↗
14.
Примечание: One-to-Many vs Many-to-One
↗
15.
Примечание: указывать ли класс в relationship()
↗
Загрузка связанных данных
12 уроков
1.
Подготовка асинхронного проекта: PostgreSQL + async/await
↗
2.
Lazy loading и проблема N+1
↗
3.
selectinload() — основная стратегия для коллекций
↗
4.
options() — механизм добавления стратегий
↗
5.
joinedload() — основная стратегия для одиночных связей
↗
6.
subqueryload() — стратегия нетерпеливой загрузки через подзапрос
↗
7.
contains_eager() + join() — самописные JOIN
↗
8.
raiseload() — запрет ленивой загрузки
↗
9.
load_only(), defer — позволяет указать, какие колонки загружать
↗
10.
with_loader_criteria() — глобальный фильтр к загрузке сущностей
↗
11.
Настройка стратегии по умолчанию в relationship(lazy=...)
↗
12.
FastAPI-эндпоинт с selectinload
↗
Каскады ORM
5 уроков
1.
Типы каскадов: save-update, merge, delete, delete-orphan
↗
2.
Каскады для разных типов связей
↗
3.
Взаимодействие с ondelete CASCADE: ORM+БД
↗
4.
passive_deletes: оптимизация удаления
↗
5.
Рекомендации по выбору каскадов
↗
SELECT-запросы
21 урок
1.
select(): базовый синтаксис
↗
2.
select_from(), add_columns(), with_only_columns()
↗
3.
Операторы сравнения: ==, !=, >, <, between, is_(), isnot()
↗
4.
Операторы: in_(), notin_()
↗
5.
like, ilike, contains, icontains, startswith, endswith
↗
6.
Операторы: and_(), or_(), not_(), &, |, ~
↗
7.
order_by(), limit(), offset()
↗
8.
group_by() и агрегаты: func.count/sum/avg
↗
9.
where() vs having(): фильтрация строк и групп
↗
10.
JOIN: join(), outerjoin(), aliased()
↗
11.
union(), union_all(), intersect(), except_() — составной запрос
↗
12.
CTE и подзапросы: cte(), subquery(), add_cte()
↗
13.
Конструкции:exists, case, coalesce, cast, label, extract, concat
↗
14.
Удалить дубликата строк: distinct() и func.count(distinct(...))
↗
15.
Оконные функции: over()
↗
16.
Оконные функции: rank, dense_rank, over()
↗
17.
Оптимизация: execution_options(), prefix_with()
↗
18.
compile(), literal_binds, get_execution_options(),compile_kwargs
↗
19.
Получение результата
↗
20.
Стили возврата
↗
21.
Общая сводка методов
↗
Асинхронность
11 уроков
1.
Асинхронный драйвер: asyncpg, aiomysql
↗
2.
create_async_engine() и async_sessionmaker()
↗
3.
expire_on_commit=False в async
↗
4.
AsyncSession: await execute(), commit(), flush()
↗
5.
begin() vs async_sessionmaker.begin()
↗
6.
AsyncAttrs
↗
7.
Lazy loading в async
↗
8.
raiseload("*") как защита
↗
9.
FastAPI + AsyncSession
↗
10.
.dispose()
↗
11.
Типичные ошибки: MissingGreenlet, DetachedInstanceError
↗
Инфраструктура
7 уроков
1.
Что такое Alembic
↗
2.
Alembic: установка, env.py
↗
3.
Alembic: revision --autogenerate, upgrade, downgrade
↗
4.
Alembic + async: engine.sync_engine, run_sync
↗
5.
Структура проекта
↗
6.
Конфигурация через .env + pydantic-settings
↗
7.
Тестирование с pytest + фикстуры БД
↗
Продвинутые темы
9 уроков
1.
Bulk-операции: bulk_save_objects(), insert().values([...])
↗
2.
UPSERT: on_conflict_do_update(), on_conflict_do_nothing()
↗
3.
deferred() — отложенная загрузка колонок
↗
4.
hybrid_property и hybrid_method
↗
5.
Events и @validates
↗
6.
selectin_polymorphic
↗
7.
Raw SQL: text(), bindparam()
↗
8.
Core API: Table, Column, MetaData
↗
9.
Использование UUID в качестве первичного ключа
↗
Практические проекты
2 урока
1.
Async CRUD с PostgreSQL
↗
2.
«Библиотека»: FastAPI + AsyncSession + selectinload
↗
Подготовка к собеседованию
4 урока
1.
Разница SQLAlchemy 1.x и 2.0
↗
2.
Шпаргалка по ключевым темам
↗
3.
Практика: SQL ↔ SQLAlchemy (параллельные примеры)
↗
4.
Топ-20 вопросов на собеседовании
↗
Заметки для автора курса
1 урок
1.
План курса
↗