в сервисе?
Чуть подробнее про оба варианта, не совсем понятно
Ну можно сделать так: await dp.start_polling(bot, session=async_alchemy_session) Или внутри метода сервиса инициализировать: def add_user(): async with AsyncSession(engine) as session: async with session.begin(): session.add_all(users) Если есть пример использования aiogram + sqlalchemy будет круто
а engine во втором случае ты как передаешь?
я пока никак не передаю, думаю каким способом сделать интеграцию
а как ты собрался в первом случае для каждого конкурентного хэндлера иметь свою сессию?
когда юзал aiohttp использовал первый способ, также думал и сейчас
хз что значит первый способ в случае aiohttp
добавлять объект сессии в kwargs.
Хорошо, значит второй способ или он тоже не верен?
1. Ну я бы взял sessionmaker, а не голый энджин. Так можно сразу настроить что-нибудь 2. Как ты собрался энджин прокидывать?
Ну я думал как global переменную сделать в начале файла и все. Я первый раз юзаю алхимию, может можешь сказать как мне изначально все правильно делать?
Никогда не юзай глобальные переменные :)
Я бы как и обычно прокинул сессию из мидлвари
ну в типизированных языках есть конструктор и там можно Dependecy Injection реализовать, если знаешь что это, в питоне я хз как такое сделать, чтобы в одном месте инициализировать и передвать инстанс, где он юзается
Ты несёшь какую-то чушь. DI в питоне ровно такой же. И конструктор есть
типа ты бы так сделал в мидлваре: data["sessionmaker"] = sessionmaker ?
хз что такое "типизированный язык"
вообще я бы сделал data["session"] = self.sessiomaker()
А самое главное как строгость типов языка влияет на возможность реализовать DI ¯\_(ツ)_/¯
Ну смотри есть C# SomeClassConstructor(ISession session) { _session = session } Тут я в startup файле говорю что ISession - singleton и во все констркуторы пердается один инстанс на всем времени работы программы, как такое в питоне делать я пока не знаю
Каким образом в конструкторы передастся твой синглтон?
это под капотом DI, там есть resolver, который перед тем как создать инстанс класса передает в конструктор объекты, которые инициализируются по особым правилам (Singleton, Transient, Scope)
resolver не является частью никакого DI
это не под капотом DI, это огород накрученный вокруг DI. как же бесит эта подмена понятий
хорошо, так как это объясняет мой вопрос?
Обсуждают сегодня