Почему 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
.......