1 мин чтения
PythonPostgreSQL
Паттерны, которые я использую с async SQLAlchemy 2.0
Паттерн репозитория, внедрение зависимостей и несколько острых углов асинхронного пути.
SQLAlchemy 2.0 даёт полноценную асинхронную сессию через asyncpg, но большинство руководств до сих пор показывают паттерны версии 1.x.
Главный сдвиг в том, чтобы принять: асинхронная сессия живёт в рамках одного запроса. Я выдаю по одной AsyncSession на запрос, и каждый репозиторий принимает её аргументом конструктора.
Острый угол это загрузка связей. С асинхронными сессиями ленивая загрузка выбрасывает MissingGreenlet. Поэтому по умолчанию я использую selectinload и возвращаюсь к этому только тогда, когда профилирование показывает узкое место.
Поделиться:Поделиться в Telegram