Назад в блог
Инженерия
1 мин чтения
PythonPostgreSQL

Паттерны, которые я использую с async SQLAlchemy 2.0

Паттерн репозитория, внедрение зависимостей и несколько острых углов асинхронного пути.

SQLAlchemy 2.0 даёт полноценную асинхронную сессию через asyncpg, но большинство руководств до сих пор показывают паттерны версии 1.x.

Главный сдвиг в том, чтобы принять: асинхронная сессия живёт в рамках одного запроса. Я выдаю по одной AsyncSession на запрос, и каждый репозиторий принимает её аргументом конструктора.

Острый угол это загрузка связей. С асинхронными сессиями ленивая загрузка выбрасывает MissingGreenlet. Поэтому по умолчанию я использую selectinload и возвращаюсь к этому только тогда, когда профилирование показывает узкое место.

Поделиться:Поделиться в Telegram
Ещё статьи