| ORMs are nice for "Hello World," and hit a brick wall later. I don't mind them for simple systems, but for more complex systems which need SQL, don't use an ORM. Mixing ORMs with raw SQL generally mixes and breaks layers of abstraction. This leads to a situation where the overall system is more complex than having a sane relational abstraction. For example, ORMs do a lot implicitly. A code change at the language level, with something like the Django ORM, can and will break your SQL code. Your data logic is also split across two places. The only time I've seen this work is for SQL for one-off analytics done at a command line, where the SQL code is never intended to be reused. EITHER: - Use an ORM, if you are building something simple like a todo list or a basic eCommerce web site; or - Use full SQL if you are doing something more complex (e.g. if you ever expect to do analytics); or - If your programmers don't understand SQL, consider whether you want an ORM, a nosql, or to find programmers better matched to the problem domain. (Footnote: Many good programmers don't understand SQL; that's okay. They just shouldn't be designing databases, any more than e.g. database experts should be designing machine learning algorithms, or machine learning experts should be designing front-end user interfaces. They're different skill domains, and they're all equally important. The key thing is people should know their skills. Otherwise, you'll get an unusable UX, a regression as our ML model, and a broken schema. This is especially true for something which looks simple on the surface but has deep theory behind it. ORMs make it look easy.) |