ORM - высший уровень абстракции при работе с БД.
Он позволяет при помощи более простых конструкций делать запросы к БД. При чем к любой БД из поддерживаемых.
Пример "более простых" конструкций (django):
Child.objects.filter(name__in=['Паша', 'Илья'], age__gte=18, parent__name='Игорь')
в SQL это будет:
SELECT * FROM "main_child" INNER JOIN "main_parent" ON ("main_child"."parent_id" = "main_parent"."id") WHERE ("main_child"."age" >= 18 AND "main_child"."name" IN (Паша, Илья) AND "main_parent"."name" = Игорь)
Громоздко, не правда ли? Тут еще не все кавычки расставлены.
Пример django-проекта тут:
https://repl.it/repls/SneakyStickyHypercard
Помимо красивых запросов в ORM красиво расписываются таблицы БД, а также обычно есть встроенные миграции, защита от инъекций, работа с FK/M2M/индексами и прочее.
Посмотрите как красиво описывается структура БД(django):
from django.db import models
class Parent(models.Model):
name = models.CharField(max_length=50)
class Child(models.Model):
name = models.CharField(max_length=150)
age = models.IntegerField(default=0)
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
В общем, не использовать ORM сегодня - глупо(так же как писать проект на голом php/python/..., используйте фреймворк). ORM упрощает жизнь и ускоряет скорость разработки. ORM не всегда формирует оптимальные запросы, но на то мы и программисты, чтобы контролировать это и решать. С ORM вы всегда можете отправить "сырой" SQL-запрос, так что не вижу проблем в этом.