Несколько дней новогоднего волшебства:
Успейте начать обучение в 2018-ом году со скидкой до 30%!
Выбрать курс

Сравниваем две популярные ORM на Python

WebDev_Deep_LAST_25.07_3_Site.png

Две самые популярные ORM на Python – это SQLAlchemy и Django ORM. Давайте взглянем на их основные различия.

Разные подходы к отображению

Django ORM использует паттерн active record, а SQLAlchemydata mapper. Если коротко, то разница между этими подходами заключается в том, что active record подразумевает, что каждая строка в базе данных будет обёрнута в отдельный python-объект. А подход data mapper позволяет управлять этим отображением.

В целом ни один из этих подходов не хуже. У каждого есть свои сильные и слабые стороны. Например, подход active record проще для понимания и популярнее, а data mapper даёт больше возможностей.

Разная гибкость

Django ORM – часть фреймворка Django, которая позволяет очень просто делать определённое подмножество всех сайтов. Django ORM обладает теми же свойствами: более-менее типичные запросы на ней можно сделать очень легко. А вот со сложными запросами Django ORM не справится.

SQLAlchemy наоборот: позволяет создавать очень сложные запросы, но в среднем формирование запроса будет сложнее.

Чаще всего именно это приводит к необходимости использовать SQLAlchemy в проектах на Django: в некоторых местах нужно сделать особо сложные запросы, с которыми не справится Django ORM, поэтому именно в этих местах используют SQLAlchemy.

Размер сообщества

Django ORM нельзя использовать отдельно от Django, поэтому и сообщество ограничено пользователями Django.

С SQLAlchemy всё иначе: она не привязана к фреймворку и позволяет строить очень сложные запросы, что делает её очень популярной. На сегодняшний день сообщество SQLAlchemy – самое большое среди сообществ других ORM на Python.

Вместо вывода

Как видите, даже основные различия показывают, что Django ORM и SQLAlchemy – это два разных инструмента для разных целей, и противоборства между ними нет.

Есть вопрос? Напишите в комментариях!

Автор
0 комментариев
Для комментирования необходимо авторизоваться