@oslik_ppc

Правильно ли использовать SQLAlchemy в AIOGRAM через Middleware?

Почему async_sessionmaker обычно пробрасывается в AIOGRAM через Middleware? Т.е. зачастую есть Middleware:

class DbSessionMiddleware(BaseMiddleware):
    def __init__(self, session_pool: async_sessionmaker):
        super().__init__()
        self.session_pool = session_pool

    async def __call__(
            self,
            handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
            event: TelegramObject,
            data: Dict[str, Any],
    ) -> Any:
        async with self.session_pool() as session:
            data["db_session"] = session
            return await handler(event, data)


И далее идет использование в обработчиках, типа:
async def handle_mess(message: Message, db_session: AsyncSession) -> None:


В чем отличие такого подхода от, допустим, варианта создания async_sessionmaker где-то в отдельном модуле, а далее его импорт в обработчики, что-то вроде:

#FILE: db.py
......
engine = create_async_engine(config.db_url, echo=True)
session_maker = async_sessionmaker(engine, expire_on_commit=False)
.........

И потом в обработчике:
#file test_handler.py
from db import session_maker

async def handle_invoice(message: Message) -> None:
   async with session_maker() as session
         .......
  • Вопрос задан
  • 635 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы