Django ORM использует реализацию активных записей - вы увидите эту реализацию в большинстве ORM. В основном это означает, что каждая строка в базе данных напрямую отображается на объект в коде и наоборот. Платформы ORM, такие как Django, не требуют предварительной настройки схемы для использования свойств в коде. Вы просто используете их, так как фреймворк может «понять» структуру, взглянув на схему базы данных. Кроме того, вы можете просто сохранить запись в базе данных, так как она сопоставлена с определенной строкой в таблице.
SQLAlchemy использует реализацию Data Mapper. При использовании такого рода реализации существует разделение между структурой базы данных и структурой объектов (они не равны 1: 1, как в реализации Active Record). В большинстве случаев вам придется использовать другой уровень персистентности, чтобы поддерживать взаимодействие с базой данных (например, чтобы сохранить объект). Таким образом, вы не можете просто вызвать метод save (), как при использовании реализации Active Record (которая является мошенничеством), но, с другой стороны, вы не должны знать всю реляционную структуру в базе данных, чтобы работать , поскольку нет прямой связи между кодом и базой данных.
Так кто из них выиграет эту битву? Никто. Это зависит от того, чего вы пытаетесь достичь. Я считаю, что если ваше приложение в основном представляет собой приложение CRUD (создание, чтение, обновление, удаление), в котором нет жестких и сложных правил, применимых к отношениям между различными объектами данных, вам следует использовать реализацию Active Record (Django). Это позволит вам легко и быстро настроить MVP для вашего продукта без каких-либо хлопот. Если у вас есть много «бизнес-правил» и ограничений в ваших приложениях, вам может быть лучше с моделью Data Mapper, поскольку она не связывает вас и не заставляет вас мыслить строго, как Active Record.