stympel
@stympel

Так ли плохо использовать ORM?

Всем привет, в БД я не особо силен, но изучаю тут углубленно Django ORM и задаюсь вопросом. А так ли плохо использовать ORM и не писать прямые запросы? Скажу больше, на проекте, где приходилось писать самому запросы к MySql, я тоже делал маленькую ORM на коленке, чтобы было проще и быстрее работать.

Есть ли какие-то жирные объективные минусы использования ORM? И какие есть плюсы использования ORM?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347
Бородатый программер
Пока Ваши запросы простые и вписываются в те кейсы, которые реализовали создатели ORM - будут сплошные плюсы: разрабатывать быстрее, данные сразу отображаются в доменную область, производительность почти не страдает.
Но в реальном мире такие задачи встречаются редко, чаще запросы выглядят как "собери данные по кусочкам с половины всех таблиц в базе, чето посчитай, с агрегируй и выдай вот в таком виде". Если ORM и позволяет такое делать, то делает как правило не самым оптимальным образом. И не редко в таких случаях приходится еще и бороться с очень умной ORM...
Как альтернативу ORM я бы еще посмотрел в сторону конструкторов запросов, где монотонные штуки хорошо абстрагированы, но в случае чего можно кусок написать на чистом SQL. И на выходе не сайд эффект в виде запроса к базу, а строка со SQL, которую можно уже отправить в базу, или сохранить в файлик, или вставить в другой запрос.
Ответ написан
@dimuska139
Backend developer
Учитывая, что во многих проектах достаточно много простых запросов (выборка по одной таблице, вставка, обновление), ORM для них использовать удобно. Единственное, когда у вас имеются связи между сущностями, следует внимательно следить за тем, какие запросы делаются к СУБД и главное, сколько их. Для Django есть [django-debug-toolbar](https://github.com/jazzband/django-debug-toolbar), с помощью которого это можно отслеживать.

Минусы ORM - неочевидность и недостаточная гибкость. Например, если мне нужно сделать UNION нескольких таблиц, для конкретного поля каждой из которых сделать alias (потому что нужные для сортировки поля называются в них по-разному), по которому выполнить сортировку всех результатов, думаю, от ORM придется отказаться. В реальных проектах, к сожалению, такие запросы встречаются сплошь и рядом, поэтому вместо ORM удобней использовать query билдеры.

Но в Django на встроенную ORM много чего завязано, поэтому отказаться от нее сложно. Я имею в виду, что если не использовать в проекте на Django встроенную ORM, то и использовать Django вообще особо смысла не имеет.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ctrlweb Ставрополь
от 80 000 до 100 000 ₽
FABRIKA Астрахань
от 60 000 ₽
Roonix Белореченск
от 40 000 до 80 000 ₽
20 окт. 2020, в 22:57
5000 руб./за проект
20 окт. 2020, в 21:37
300000 руб./за проект
20 окт. 2020, в 21:18
500 руб./за проект