Vindicar
@Vindicar
RTFM!

Есть ли для Python простые в использовании ORM с поддержкой asyncio и type hints?

Что требуется:
  1. Поддержка SQLite.
  2. Поддержка асинхронного выполнения запросов, или хотя бы нормальная работа в корутинах.
  3. Поддержка механизмов type hints для упрощения работы с IDE. Иными словами, если я описываю столбец в таблице, IDE должна подсказывать наличие соответствующего поля у объекта модели.

Какие варианты я рассматривал, и почему они не "удобные":
  • sqlalchemy[asyncio] - популярная, но документация отвратительная. Если не значешь точно, что ищешь - найти нереально. Дело значительно усложняется тем, что либа поддерживает два подхода к описанию классов моделей (что само по себе не очень-то питонично), и документация обычно использует только один из них. Например, императивный подход не поддерживает type hints, но значительная доля документации использует именно его, и понять "как сделать то же самое, но декларативно" в большинстве случаев трудно.
    Словом, либа умеет всё что нужно, но начать работать с ней нереально тяжело. Предлагаемый в документации Unified guide в этом не помощник. Например, я так и не понял, как сделать внешний ключ к одной сущности частью первичного ключа другой.
  • peewee - простая в использовании. Но автор категорически не приемлет ни type hints, ни asyncio. Хотя есть сторонние асинхронные модификации, они не без проблем. Да и в целом такой подход вызывает вопрос - стоит ли связываться?
  • peewee-aioОдна из сторонних модификаций. Пока что наиболее приемлемый вариант, хотя документации почти нет. Большая часть совпадает с базовой peewee, отличается объявление моделей и итоговое выполнение запроса.
  • pony ORM - очень интересная либа, но не дружит с асинхронностью. Использовать в асинхронных приложениях нужно очень осторожно - упрощённо, только синхронный код в рамках рабочей сессии БД.
  • tortoise-orm - слишком примитивна, не поддерживает даже составные ключи.
  • piccolo-orm - та же самая проблема. Зато имеет встроенную админку.
  • ormar - базируется на sqlalchemy и использует pydantic. Это потенциальная проблема, так как есть информация, что апдейт pydantic до версии 2.0 безнадёжно сломал либу.
  • orm - не поддерживает type hints, насколько я понял.
  • django orm - честно, ещё не пробовал. Она тащит за собой весь Django? В сети есть противоречивые сведения на этот счёт.

Какие ещё ORM я упустил?
  • Вопрос задан
  • 578 просмотров
Решения вопроса 1
Vindicar
@Vindicar Автор вопроса
RTFM!
В итоге стиснул зубы и остановился на SQLAlchemy. Да, там по несколько взаимоисключающих способов сделать одну вещь, да, приходится таскать за собой объект сессии, да, на документацию лучше переходить через stackoverflow, но оно хотя бы заработало сразу же.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
fenrir1121
@fenrir1121
Начни с документации
Алхимия де-факто стандарт. Можно попробовать врапперы над ней, хотя все тоже с проблемами. Eсть подозрения, что сейчас алхимия и пайдентик апнулись до 2 версии и оживет sqlmodel.

Что до списка выше есть вот такой разбор от контрибьютора черепашки. Можно глянуть по цифрам и выводам, с чем-то из ограничений все равно приходится мириться.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Вы все популярные перечислили, в Джанге тоже нет
че-то был уверен что Пони близко, когда-то юзали ее именно изза скорости, но изза оригинального синтаксиса зареклись....

тут коменты посмотрите, может уже что-то поменялось
но я думаю, такого не может быть в принципе - только обертками и упрощениями

с другой стороны, если гонитесь за скоростью, то ORM как бы и не нужен,но это мое мнение
Ответ написан
Ваш ответ на вопрос

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

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