проекта ищу асинк orm, из выбора есть sqlalchemy 1.4, gino, tortoise orm и pewee-async
pewee-async сразу нет
gino работает, но там надо вручную many to many и остальным управлять
sqlalchemy 1.4 тоже работает, но когда я несколько месяцев назад пробовал добавлять столкнулся с некоторыми проблемами (это было на версии 1.4.9):
Были проблемы типа another operation is in progress, и нет возможности делать удобное await model.query.all(), т.е. какой-то доступ к сессии отовсюду (хотя возможно какое-то свое решение можно прикрутить)
ну и плюс там так или иначе это бета пока что
и ещё я не нашел удобного способа чтобы оно для m2m получало список айдишников, а не полные объекты (и обновление соответственно не очень удобное)
Посмотрел сегодня tortoise, там появились миграции на основе SQL, плюс autogenerate и все в принципе работает. Автогенерация pydantic схем для fastapi. Удобный доступ где угодно
Пока не известно, где подвох) Я его ранее не использовал, главный вопрос в стабильности
Нельзя иметь доступ к сессии "отовсюду", это говнокод
Я ранее писал, что если бы было только fastapi приложение, то через Depends сессия прекрасно передается, но могли быть например фоновые таски или места, куда её сложно передать, поэтому удобнее получить доступ через модель напрямую например (так делает например flask-sqlalchemy. Там тоже говнокод?) Алхимию именно из-за стабильности?
> Там тоже говнокод? Да
Если бы я увидел хоть один крупный проект на алхимии где все удобно передается и прекрасно работает без этого, я с удовольствием начну так делать) Есть такие в опенсорсе? Проекты на фласке, где почти все алхимию юзают, получаются отпадают, т.к. большинство юзают flask-sqlalchemy Про проблемы глобалов я прекрасно знаю
Не особо крупный, но но на алхимии + фастапи с нормально реализованным DI https://github.com/GLEF1X/fastapi-project
В SQLAlchemy сессии не глобальные. Там под капотом используется scopedsession, который кладется в thread локалы.
Сейчас решил заюзать алхимию как раз. Раньше юзал asyncpg, а там connection pool, через который можно параллельные запросы слать без всяких another operation in progress. Сейчас думаю над тем, как правильно создавать и прокидывать сессию 😂
Обсуждают сегодня