Создаёт сессию на операцию и гарантирует возврат соединения в пул
Зачем
Зачем это нужно
Загружает нужные связи явно до выхода из асинхронного контекста
Отделяет транзакцию записи от долгого HTTP-вызова к внешней системе
Вопросы
Частые вопросы
Откуда берётся MissingGreenlet?
ORM попыталась выполнить скрытый запрос при обычном обращении к атрибуту в месте, где асинхронный ввод-вывод не разрешён. Обычно виновата lazy relationship или истёкший объект. Модель добавит selectinload либо явный запрос и проверит, что сериализация ответа больше не ходит в базу.
Можно ли использовать одну AsyncSession глобально?
Нет, сессия хранит транзакционное состояние и не рассчитана на параллельные независимые запросы. Создавайте её на одну операцию через фабрику или dependency. Модель оставит engine и pool общими, а сессию ограничит контекстом, чтобы rollback одного пользователя не затронул другого.
Где делать commit?
На уровне прикладной операции, которая знает границу атомарности, а не внутри каждого repository-метода. Тогда несколько изменений фиксируются вместе и корректно откатываются. Модель перенесёт commit наружу и добавит обработку исключения, не оставляя полуоткрытую транзакцию в возвращённой сессии.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.