Pull to refresh

Comments 10

>— Расход памяти на вызовы функций, на хранение в памяти генераторов. Строка все-таки занимает меньше места в памяти.

Несколько смущает этот момент. Если это становиться хоть как то заметным то разве мы не можем сгенерировать запрос и затем уже использовать сконструированный?
Верно в случае, если не надо динамически строить запросы. К примеру, для оптимизации выкидывать цепочку из JOIN. Опять же под разные базы не нагенерируешь
Я вас не понимаю. Запрос строиться динамически один раз под конкретный диалект. Затем он спокойно периспользуется столько раз сколько надо с нужными параметрами.
я имею в виду не просто диалект базы, а сам по себе запрос. Т.е. мы можем в зависимости от входящих данных использовать (подключать-отключать) разные таблицы.
Мне кажется, вы немножко лукавите, говоря о таких преимуществах ORM, как:

— Возможность вообще не знать SQL, т.к. прямого использования SQL нет.
— Не надо писать километровые запросы самому

Понять ORM без знания SQL невозможно. И SQL-код во всех примерах, кроме, пожалуй, самого простого JOIN, будет более компактным и удобочитаемым, чем обращения к ORM. SQL вообще очень литературен.

Хотя основного смысла применения ORM — писать на одном языке, а не на двух — я не отрицаю. И всё же ORM для более-менее сложной работы с данными — гиря на ногах.
Чем хорош ORM. В один прекрасный день вы пишете красивый компактный sql код. Все отлично. Потом вам захочется добавить добавить какое либо динамическое условие к запросу. Потом захочется добавить что нибудь типа педжинации. Потом сортировку по пользовательскому параметру… В один прекрасный момент окажется что вместо красивого компактной строчки sql кода приходится возиться с кучей стрингбилдеров и условных операторов. Это я еще про необходимость поддержки разных диалектов не говорю. Это надо будет как то поддерживать. Что то уйдет в хелпер методы. Потом появятся фабрики запросов… В один прекрасный момент вы проснетесь с понимаем того что написали еще одну ORM.

Чем хорош SQL Alchemy в отличие от той же DjangoORM — в первую очередь это конструктор запросов. Довольно гибкий и удобный. Во вторую меппер. Ну и всякие плюшки типа пулла конешенов, кешерирования и изоляции транзакций.
Это имхо напоминает пословицу — пока толстый сохнет — худой дохнет. К моменту, когда исходно стройно написанная на чистом SQL система настолько обрастает костылями, что с трудом поддерживается, ее ORM-based брат уже обычно существует в состоянии зомби, не в силах переварить ни объем данных, ни интенсивность запросов к ним, ни конкурентность их модификации.
меня больше «напрягает» только одно. SQLAlchemy еще не имеет как таковую стабильную версию. Уже как лет 9 прошло с момента начала работ, но радует, что все активно развивается и особо не глючит.
> К сожалению, в больших проектах не обходится без частных случаев и программисты при сложных запросах пишут либо raw sql, либо полагаются на то, что им предлагает базовый функционал ORM. Это выглядит не совсем красиво или создает достаточно большую нагрузку на базу данных.

Есть еще один вариант. Делают денормализации, вешают обработчики событий на CRUD операции, превращают SQL в NoSQL и на выходе получают не проект, а какашку.

P.S. Сам однажды вляпался в такое г.
Могли бы добавить генерируемый SQL к примерам. Во первых интересно что получится, во вторых более наглядно.
Sign up to leave a comment.