TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #364

@pythonotes

Python Заметки

Прегледи2,120Број на прегледи
Објавено26 фев.26.02.2024 г., 09:10
Содржина

Содржина на објавата

Когда пишешь асинхронный код нужно учитывать особенности такого подхода. Всегда требуется держать в уме, когда возвращается корутина а когда реальный результат. Между этими двумя сущностями должен быть вызов через await. Вот пример синхронного запроса в базу данных с помощь sqlalchemy. Query пишу инлайном для компактности. entities = session.execute(select(EntityModel)).scalars().all() Всё ясно и линейно. А вот он же асинхронный. result = await session.execute(select(EntityModel)) entities = result.scalars().all() Это значит что session.execute возвращает корутину, или awaitable объект. Сначала его нужно выполнить через await, тогда получишь объект с которым можно дальше работать. Не хочу сказать что это мастхэв практика, но простые асинхронные запросы тоже можно сократить до одной строки. Просто использовать скобки. entities = ( await session.execute(select(EntityModel)) ).scalars().all() На самом деле я использую такую конструкцию только в прототипах тестов или вспомогательных функциях тестов. В продакшн такое обычно не попадает. #tricks