В предыдущем уроке мы изучили синхронную версию SQLAlchemy. Но в современном веб-разработке асинхронность стала стандартом. Веб-фреймворки, такие как FastAPI, работают асинхронно и ожидают, что все операции с базами данных тоже будут асинхронными. Если использовать синхронную SQLAlchemy в асинхронном веб-приложении, это заблокирует весь цикл событий и резко ухудшит производительность — все пользователи будут ждать, пока один запрос к базе данных не завершится. Поэтому важно научиться работать с базами данных асинхронно.
В этом уроке мы продолжим изучение SQLAlchemy и перейдём к её асинхронной версии. Вы узнаете, чем асинхронная работа с БД отличается от синхронной, какие преимущества она даёт и в каких случаях необходима. Научимся создавать асинхронный движок с помощью create_async_engine, использовать AsyncSession вместо обычной сессии, выполнять запросы с await.
Мы подробно разберём все асинхронные операции: создание таблиц через run_sync, добавление объектов (session.add, session.commit), выполнение запросов на чтение (session.execute), обновление и удаление данных. Научимся управлять транзакциями с помощью session.begin() и обрабатывать ошибки с откатом изменений.
Особое внимание уделим проблеме lazy loading (ленивой загрузки) в асинхронном контексте. Когда вы обращаетесь к связанным объектам (например, user.orders), SQLAlchemy по умолчанию делает дополнительный запрос к базе данных. Но в асинхронном режиме это может привести к ошибкам, если сессия уже закрыта. Вы узнаете, как использовать selectinload для жадной загрузки связанных данных в одном запросе.
Ключевая часть урока — интеграция async SQLAlchemy с FastAPI. Вы создадите полноценное веб-приложение, которое будет асинхронно читать и записывать данные в PostgreSQL. Мы создадим модели, зависимости для получения сессии, эндпоинты для работы с пользователями и их постами, а также протестируем всё через Swagger или Postman.
Все примеры будут максимально практичными: построим асинхронное приложение для интернет-магазина (или блога), выполним параллельные запросы к базе данных, сравним время выполнения синхронной и асинхронной версий. К концу урока вы будете уверенно использовать async SQLAlchemy в любых асинхронных проектах, включая FastAPI.