Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. SQLAlchemy: от основ до экспертного уровня
Базы данных·20 тем·198 вопросов·уровень Middle, Senior

SQLAlchemy: от основ до экспертного уровня

Полный практический курс по SQLAlchemy 2.0+, Alembic и лучшим практикам работы с базами данных в Python. Охватывает Core, ORM, async, оптимизацию производительности, тестирование и production-паттерны.

Начать курс

SQLAlchemy: от основ до экспертного уровня

N+1 не выглядит как ошибка. Вы пишете цикл по заказам, обращаетесь к order.items, и SQLAlchemy аккуратно делает по отдельному запросу на каждой итерации — на десяти записях это незаметно, на десяти тысячах ложится база. Большая часть курса про такие места: где ORM делает не то, что кажется по коду, и как это увидеть раньше продакшена.

Двадцать тем на SQLAlchemy 2.0 с типизацией. Начало — Core и ORM рядом, чтобы было понятно, что ORM надстроена над языком выражений, а не заменяет его, и что в отчётных запросах спускаться в Core нормально. Затем связи и стратегии загрузки (selectinload, joinedload, lazy), Query API с агрегациями и оконными функциями, сессии, Unit of Work, уровни изоляции.

Alembic занимает три темы: автогенерация и её типичные промахи, ветвление и слияние веток миграций, миграции данных, ревью миграции как отдельный навык — и онлайн-изменения схемы без даунтайма, где важен не столько SQL, сколько порядок шагов относительно выкатки кода.

Остальное — то, что всплывает в эксплуатации: async с asyncpg и AsyncSession, чтение планов выполнения и подбор индексов, тесты в откатываемой транзакции, события и аудит изменений, TypeDecorator для своих типов, hybrid properties и association proxy, три вида наследования, работа с несколькими базами и шардирование, пул соединений и его настройка под нагрузку. В конце — приложение целиком, с миграциями и тестами.

Нужен SQL: курс объясняет, как SQLAlchemy строит запрос, но не что такое JOIN. Уровень — middle и senior.

  1. 1

    Введение и установка

    Экосистема SQLAlchemy, версия 2.0+, настройка окружения, первое подключение

    8 вопросов
  2. 2

    SQLAlchemy Core

    Таблицы, выражения, выполнение запросов через Core API

    10 вопросов
  3. 3

    ORM Basics

    Декларативные модели, сессии, базовые CRUD операции

    10 вопросов
  4. 4

    Relationships и связи

    Одно-ко-многим, многие-ко-многим, loading strategies

    10 вопросов
  5. 5

    Query API

    select(), фильтрация, агрегации, оконные функции

    10 вопросов
  6. 6

    Alembic: Основы

    Инициализация, авто-миграции, code review миграций

    10 вопросов
  7. 7

    Alembic: Продвинутые техники

    Ветвление, data migrations, кастомные операции

    10 вопросов
  8. 8

    Async SQLAlchemy

    asyncpg, aiomysql, AsyncSession, паттерны асинхронного кода

    10 вопросов
  9. 9

    Query Optimization

    Execution plans, индексы, решение N+1 проблемы

    10 вопросов
  10. 10

    Sessions и Unit of Work

    Transaction management, isolation levels, session patterns

    10 вопросов
  11. 11

    Advanced Alembic

    Онлайн-миграции без downtime, кастомные операции, тестирование миграций

    10 вопросов
  12. 12

    Testing Strategies

    Transactional тесты, фикстуры, изоляция тестов

    10 вопросов
  13. 13

    Data Validation

    Pydantic интеграция, валидация на уровне модели, constraints

    10 вопросов
  14. 14

    Events и Hooks

    Аудит, триггеры, кастомная логика через events

    10 вопросов
  15. 15

    Custom Types

    TypeDecorator, JSON, специализированные типы данных

    10 вопросов
  16. 16

    Advanced Patterns

    Hybrid properties, association proxies, computed columns

    10 вопросов
  17. 17

    Polymorphism

    Single/multi/joined table inheritance, polymorphic loading

    10 вопросов
  18. 18

    Multi-DB и Sharding

    Горизонтальное масштабирование, routing, sharding стратегии

    10 вопросов
  19. 19

    Production Performance

    Connection pooling, batching, monitoring, production deployment

    10 вопросов
  20. 20

    Final Project

    Полноценное приложение с тестами, миграциями и best practices

    10 вопросов
  21. Зачёт

    Доступен после всех тем (0 из 20)

  22. Экзамен

    Доступен после зачёта

30 / 30

Engine

Основные концепции

Центральный объект SQLAlchemy, управляющий подключением к базе данных и пулом соединений. Создаётся через create_engine() и используется для выполнения запросов.

Пример

engine = create_engine('postgresql+psycopg://user:pass@localhost/dbname', pool_size=10, max_overflow=20)

Связанные термины

Connection Pool

Производительность

Механизм переиспользования соединений с базой данных для избежания накладных расходов на создание нового соединения для каждого запроса.

Пример

engine = create_engine('postgresql://...', pool_size=10, max_overflow=20, pool_recycle=3600)

Связанные термины

Session

ORM

Рабочее пространство для операций с ORM-объектами. Реализует паттерн Unit of Work — отслеживает изменения объектов и синхронизирует их с БД при commit().

Пример

with Session(engine) as session: user = User(name='Alice') session.add(user) session.commit()

Связанные термины

Unit of Work

ORM

Паттерн, реализованный в Session: отслеживает все изменения объектов в памяти и синхронизирует их с базой данных атомарно при вызове commit().

Пример

session.add(obj) # отслеживается session.delete(obj) # отслеживается session.commit() # все изменения сохраняются

Связанные термины

Identity Map

ORM

Паттерн, гарантирующий, что каждая строка БД представлена ровно одним объектом в рамках сессии. Повторный запрос того же объекта вернёт тот же экземпляр.

Пример

user1 = session.get(User, 1) user2 = session.get(User, 1) assert user1 is user2 # True

Связанные термины

Declarative Base

ORM

Базовый класс для ORM-моделей, создаваемый через declarative_base() или orm.DeclarativeBase. Определяет метаданные и таблицу.

Пример

from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True)

Связанные термины

Metadata

Основные концепции

Коллекция объектов Table, описывающих схему базы данных. Используется для создания таблиц (metadata.create_all()) и рефлексии.

Пример

metadata = MetaData() table = Table('users', metadata, Column('id', Integer, primary_key=True) ) metadata.create_all(engine)

Связанные термины

Relationship

ORM

ORM-конструкция для связи между моделями (one-to-many, many-to-many, one-to-one). Определяется через relationship().

Пример

class User(Base): posts = relationship('Post', back_populates='author') class Post(Base): author = relationship('User', back_populates='posts')

Связанные термины

Foreign Key

Основные концепции

Ограничение целостности, связывающее колонку одной таблицы с первичным ключом другой таблицы.

Пример

class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id'))

Связанные термины

Loading Strategies

Производительность

Способы загрузки связанных объектов: joinedload (JOIN), selectinload (отдельный SELECT с IN), subqueryload (подзапрос), lazy (загрузка по требованию).

Пример

stmt = select(User).options(joinedload(User.posts)) users = session.execute(stmt).scalars().all()

Связанные термины

N+1 Problem

Производительность

Антипаттерн производительности: один запрос для получения родительских объектов + N запросов для загрузки связанных объектов. Решается через eager loading.

Пример

# Плохо: N+1 запросов for user in users: print(user.posts) # отдельный запрос # Хорошо: 1 запрос с JOIN stmt = select(User).options(joinedload(User.posts))

Связанные термины

Alembic

Alembic и миграции

Инструмент миграции базы данных для SQLAlchemy. Управляет версионированием схемы БД через миграционные скрипты.

Пример

alembic init alembic alembic revision --autogenerate -m 'Add users table' alembic upgrade head

Связанные термины

Migration (Миграция)

Alembic и миграции

Скрипт, описывающий изменения схемы базы данных (создание таблиц, добавление колонок и т.д.). Выполняется через Alembic.

Пример

# revision: abc123 # down_revision: None def upgrade(): op.create_table('users', Column('id', Integer, primary_key=True) )

Связанные термины

Revision

Alembic и миграции

Уникальный идентификатор миграции в Alembic. Миграции образуют связный список через down_revision.

Пример

# revision: def456 # down_revision: abc123 # branch_labels: None # depends_on: None

Связанные термины

Data Migration

Alembic и миграции

Миграция, изменяющая данные в БД (не только схему). Например, заполнение новых колонок, трансформация значений.

Пример

def upgrade(): op.add_column('users', Column('full_name', String)) # Заполняем данные conn = op.get_bind() conn.execute(text('UPDATE users SET full_name = CONCAT(first_name, ' ' ', last_name)'))

Связанные термины

AsyncSession

Асинхронность

Асинхронная версия Session для использования с asyncpg или aiomysql. Все методы являются асинхронными и требуют await.

Пример

from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine engine = create_async_engine('postgresql+asyncpg://localhost/db') async with AsyncSession(engine) as session: result = await session.execute(select(User)) users = result.scalars().all()

Связанные термины

asyncpg

Асинхронность

Быстрый асинхронный PostgreSQL драйвер для Python. Используется с SQLAlchemy через dialect 'postgresql+asyncpg'.

Пример

engine = create_async_engine( 'postgresql+asyncpg://user:pass@localhost/dbname', echo=True )

Связанные термины

Execution Plan (План выполнения)

Производительность

Стратегия, которую PostgreSQL выбирает для выполнения запроса. Анализируется через EXPLAIN ANALYZE для оптимизации.

Пример

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com'; # Seq Scan vs Index Scan # Cost, Rows, Width

Связанные термины

Index (Индекс)

Производительность

Структура данных для ускорения поиска по колонкам. B-tree (по умолчанию), GiST, GIN, Hash. Создаётся через Index() или index=True в Column.

Пример

# В модели email = Column(String, index=True) # Отдельный индекс Index('ix_users_email', User.email) # Composite index Index('ix_users_name_email', User.name, User.email)

Связанные термины

Transaction

Основные концепции

Атомарная единица работы с БД. Все изменения либо применяются, либо откатываются. Управляется через session.begin() или session.commit().

Пример

with Session(engine) as session: with session.begin(): # транзакция user = User(name='Alice') session.add(user) # commit автоматически # rollback при ошибке

Связанные термины

Isolation Level

Продвинутые концепции

Уровень изоляции транзакции: READ COMMITTED (по умолчанию в PostgreSQL), REPEATABLE READ, SERIALIZABLE. Влияет на видимость изменений между транзакциями.

Пример

engine = create_engine( 'postgresql://...', isolation_level='REPEATABLE READ' ) # Или на уровне сессии with session.begin(isolation_level='SERIALIZABLE'): ...

Связанные термины

Bulk Operation

Производительность

Массовые операции (вставка, обновление, удаление) для высокой производительности. bypasses Unit of Work, не отслеживает изменения.

Пример

# Bulk insert session.bulk_insert_mappings(User, [ {'name': 'Alice'}, {'name': 'Bob'} ]) # Bulk update session.bulk_update_mappings(User, [ {'id': 1, 'name': 'Alice Updated'} ])

Связанные термины

TypeDecorator

Продвинутые концепции

Механизм создания кастомных типов данных. Позволяет модифицировать значения при чтении/записи в БД.

Пример

class EncryptedString(TypeDecorator): impl = String cache_ok = True def process_bind_param(self, value, dialect): return encrypt(value) def process_result_value(self, value, dialect): return decrypt(value)

Связанные термины

Hybrid Property

Продвинутые концепции

Атрибут, работающий как на уровне экземпляра (Python), так и на уровне класса (SQL выражение). Определяется через @hybrid_property.

Пример

class User(Base): @hybrid_property def display_name(self): return f'{self.first_name} {self.last_name}' @display_name.expression def display_name(cls): return func.concat(cls.first_name, ' ', cls.last_name)

Связанные термины

Association Proxy

Продвинутые концепции

Прокси-атрибут для доступа к связанным объектам через промежуточную таблицу. Упрощает работу с many-to-many.

Пример

class User(Base): tags = relationship('UserTag', back_populates='user') tag_names = association_proxy('tags', 'tag_name') # Использование user.tag_names = ['python', 'sql']

Связанные термины

Polymorphism (Полиморфизм)

Продвинутые концепции

Возможность иметь несколько подклассов ORM, сохраняемых в одну или несколько таблиц. Типы: single, joined, concrete table inheritance.

Пример

class Employee(Base): __tablename__ = 'employees' id = Column(Integer, primary_key=True) type = Column(String) # discriminator __mapper_args__ = {'polymorphic_on': type} class Manager(Employee): __tablename__ = 'managers' id = Column(ForeignKey('employees.id'), primary_key=True) __mapper_args__ = {'polymorphic_identity': 'manager'}

Связанные термины

Event Listener

Продвинутые концепции

Механизм подписки на события SQLAlchemy (before_insert, after_update, etc.). Используется для аудита, кастомной логики.

Пример

@event.listens_for(User, 'before_insert') def receive_before_insert(mapper, connection, target): target.created_at = datetime.utcnow() @event.listens_for(Session, 'before_commit') def before_commit(session): ...

Связанные термины

Transactional Test

Тестирование

Паттерн тестирования: каждый тест запускается в транзакции, которая откатывается после теста. Обеспечивает изоляцию и скорость.

Пример

@pytest.fixture def session(engine): with engine.begin() as conn: transaction = conn.begin() SessionLocal.bind = conn yield SessionLocal() transaction.rollback()

Связанные термины

Reflection (Рефлексия)

Основные концепции

Автоматическое получение метаданных о существующей схеме БД (таблицы, колонки, индексы) и создание объектов Table.

Пример

# Автоматическая загрузка всех таблиц metadata = MetaData() metadata.reflect(engine) # Конкретная таблица users = Table('users', metadata, autoload_with=engine)

Связанные термины

Sharding (Шардирование)

Продвинутые концепции

Горизонтальное разделение данных между несколькими базами данных (шардами). SQLAlchemy поддерживает через Session.binds.

Пример

Session.configure(bind=engine, binds={ User: engine1, Post: engine2 }) # Или через sessionmaker Session = sessionmaker(bind=engine, binds={ User: 'users_db', Post: 'posts_db' })

Связанные термины

Частые вопросы о курсе «SQLAlchemy: от основ до экспертного уровня»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «SQLAlchemy: от основ до экспертного уровня»?

Курс включает 20 тем и 198 вопросов с разбором ответа. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «SQLAlchemy: от основ до экспертного уровня»?

Маршрут охватывает уровни Middle, Senior. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «SQLAlchemy: от основ до экспертного уровня» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «SQLAlchemy: от основ до экспертного уровня» бесплатный?

Да, курс полностью бесплатный: все 20 тем доступны без оплаты.