Сегодня поговорим про ORM в Python (для реляционных БД). Их, на удивление, не так уж и много.

  1. Django ORM — простая, мощная, с миграциями, в меру адекватная, доступная возможность оптимизации запросов. Вот только не все проекты делаются на Django, а ради одной только ORM его тащить никто не станет, слишком уж много оверхеда.

  2. SQLAlchemy — популярная, чертовски мощная, с возможностью максимального контроля за происходящим. Но не такая уж и простая в освоении и понимании, с некоторым набором неявных моментов под капотом.

  3. Peewee — ORM легковесная и чертовски простая в освоении. Must have для маленьких проектов.

  4. Pony ORM — ORM с онлайн конструктором моделей и некоторыми интересными подходами. Если честно, ни разу не использовал. Синтаксис на основе итераторов имеет свои особенности: писать запросы просто, а вот для того, чтобы сделать их не слишком прожорливыми к ресурсам, придётся приложить немало усилий. Если решите её освоить и испытать в бою — напишите мне свои впечатления, будет интересно узнать.

В общем, выбор ORM я делаю как-то так:

  • Крупный web-проект — Django с его ORM и прочими плюшками. Третья версия None была переписана именно на Django ради ORM, многопоточности и webhook’ов.
  • Что-то крупное вне web’а или web-проект среднего размера — SQLAlchemy.
  • Небольшие проекты и прототипы — Peewee.