> we're way past the point where folks have traditionally said "Django starts to constraint you". We've found that to be untrue. We love the templating, the ORM
Well, that means you are not past that point. First you learn to love your tools, then you learn to hate them, and it's ok.
It's not really that hard to reach the point where the orm pisses you off (examples: https://speakerdeck.com/alex/why-i-hate-the-django-orm by core dev, there is a talk somewhere on pyvideo.org), especially if you have actually written some complex sql queries in your life.
Honestly, it's more of a 98/2 case for most business systems. Writing complex SQL for that 2% hasn't bothered me particularly thus far. And for simple (and not so simple) joins, the syntax is lighter than SQLAlchemy.
I'm not saying the critique is bad, it's just that in practice it's not something you'll be noticing day to day, and if you are, switching to pure SQL or SQLAlchemy is not a bad alternative (and Django makes that very easy to do).
Sure, I'm currently doing a project with SqlAlchemy in Django (I went pure SqlA in there, but there is Aldjemy if anyone wants to just occasionally extend their query capabilities on top of Django's objects). There is no doubt Django orm is easy for most web crud cases, but also you have to admit that many queries that are trivial to write in pure sql take some weird gymnastics to implement using the orm (Q, F, extra, mapping raw_sql - yuk) - that's what I meant by 'pisses you off'.
Yes, and there is a cognitive overhead to think SQL queries both in Django ORM syntax and SQL and when should I switch between ORM syntax and raw_sql, when should I implement custom manager etc.
Our codebase is an enterprise app and it has maybe a ratio of 50/50 between complex queries and straightforward single table selects or simple joins. I much prefer SQLAlchemy Core: I can think a complex query in SQL, try it in sql shell and implement it in SQLAlchemy Core so that the resulting code resembles the actual query. This resemblance also helps a lot of when you do performance optimizations.
Well, that means you are not past that point. First you learn to love your tools, then you learn to hate them, and it's ok.
It's not really that hard to reach the point where the orm pisses you off (examples: https://speakerdeck.com/alex/why-i-hate-the-django-orm by core dev, there is a talk somewhere on pyvideo.org), especially if you have actually written some complex sql queries in your life.