Как @Selcuk цитирует:
Когда API, модель запроса не идут достаточно далеко, вы можете упасть обратно к написанию сырой SQL.
Это означает, что вы должны использовать ОРМ, если вам абсолютно не нужно отступать. Поистине, вы можете пойти довольно далеко с ORM.
Некоторые быстрые базовые преимущества;
- В результате получается более чистый код.
- При работе с объектами вы получаете преимущества методов объектов и методов, которые вы создаете.
- Легкая выборка относительных объектов.
В качестве примера, скажем, у вас есть users
и comments
Это может выглядеть следующим образом:
class User(models.Model):
name = models.CharField(max_length=150)
email = models.EmailField()
class Comment(models.Model):
author = models.ForeignKey(User)
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
Давайте захватить, что последний пользователь, который подписался:
user = User.objects.last()
Ничего себе, это было легко. Теперь давайте рассмотрим все их комментарии:
user.comment_set.all()
Серьезно, вы все еще хотите написать SQL?
Давайте захватить все наши новые комментарии со вчерашнего дня:
comments = Comment.objects.filter(created_at__gte='2016-04-18')
Ой, подождите, вы хотите комментариев со вчерашнего дня на определенный адрес электронной почты? Ну, диспетчер объектов модели возвращает запрос, мы можем связать этих ребят в течение всего дня, и он не будет оцениваться (фактически попадает в базу данных), пока мы не попытаемся что-либо с ним сделать. Они лениво оценивали
user_comments = comments.filter(author__email='[email protected]')
Это Dunder (двойное подчеркивание) может означать несколько вещей. В этом случае мы фильтруем по моделью author
, которая является отношением внешнего ключа к модели User
, и dunder позволяет нам указать поле для сравнения.
Выше, Dunder использовался для указания оператора сравнения, __gte
, который «больше или равно»
Надеюсь, вы начинаете видеть, почему ОРМ полезно, и они просто поцарапать поверхность и обработка объектов выбора!
Почему вы думаете, что разработчики Django дошли до такой длины, чтобы построить ORM, если они не хотели, чтобы вы его использовали? –