Сравниваем две популярные ORM на Python
Две самые популярные ORM на Python – это SQLAlchemy и Django ORM. Давайте взглянем на их основные различия.
Разные подходы к отображению
Django ORM использует паттерн active record, а SQLAlchemy – data 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 – это два разных инструмента для разных целей, и противоборства между ними нет.
Есть вопрос? Напишите в комментариях!