Думаю, все мы тут умеем писать SQL-запросы голыми руками. И тем не менее многие из нас при разработке используют или пытаются использовать те или иные библиотеки для ORM или Active Record.
Мы сейчас на работе пишем веб-приложуху на Питоне, и для ORM используем SQLAlchemy. SQLAlchemy была выбрана после того, как оказалось, что по паре критериев наша легаси-база совершенно, видите ли, непригодна для имеющихся абстракций в Django ORM. Ну окей, хорошо, что код всё равно только-только начали переписывать, так что смогли себе позволить быстро переделать написанные модели с Django на SQLAlchemy и дальше работать с ней. Ну окей, освоили её не очень привлекательный синтаксис построения запросов. И вот спустя некоторое время обнаруживаем очередную глухую стену. Специально не буду говорить, какую: я пока ещё не выяснил, возможно ли решить мою задачу средствами SQLAlchemy или нет, и не хочу быть дураком, утверждая, что невозможно.
Но факт в том, что я снова убиваю полдня на войну с грёбаным фреймворком – со штукой, которая должна упрощать написание запросов. Причём убиваю явно на пустом месте, потому что нужный мне запрос я бы уже давно написал руками, ну, разве что лень было перечислять нужные поля в селекте. Причём, как я уже сказал, есть ли свет в конце тоннеля, мне неведомо. Может, через ещё половину рабочего дня я решу проблему и успокоюсь, а может, после ещё целого дня пойму, что SQLAlchemy просто неспособна на нужный мне запрос.
Вопрос знатокам: доколе? Сколько настоящий, правильный, постигший дзен веб-разработки лоровец стал бы терпеть прихоти своего ORM-фреймворка? Выкинул бы в тот же миг, как потребовалось залезть глубже пяти страничек туториала и зубрить хитроспелетения методов вместо того, чтобы SQL в зубы и делом заниматься? Или выкинул бы в тот момент, когда провозился больше дня? Или изначально не стал бы брать, если точно знал (мой случай!), что в приложении будет что-то посложнее, чем простой CRUD без джойнов? Или терпел бы до последнего? Но где оно – последнее, после которого нужно признать, что фреймворк всё только портит?
И насколько (в процентах, в количестве запросов, в попугаях) допустимо мешать в одном проекте ORM-модели с простым SQL-кодом?
В общем, ЛОР, научи уму-разуму. Или подсунь что-нибудь почитать на эту тему. Только не про сам SQL – его-то я знаю на адекватном для конкретно моих задач уровне, – а именно про методологию, про умение выбирать или не выбирать инструменты, чтобы проект не превратился в месиво.