Junior — Middle
Quelle est la principale différence entre les fonctions annotate et aggregate dans Django ORM lors de l'exécution de requêtes?
sobes.tech IA
Réponse de l'IA
Dans Django ORM, les fonctions annotate et aggregate sont utilisées pour travailler avec des données agrégées, mais ont des objectifs différents :
-
annotateajoute des champs calculés à chaque objet dans le QuerySet. Autrement dit, à chaque enregistrement, on ajoute un champ supplémentaire avec le résultat d'une fonction d'agrégation. -
aggregatecalcule une valeur agrégée pour l'ensemble du QuerySet et renvoie un dictionnaire avec les résultats, sans lien avec des objets individuels.
Exemple :
from django.db.models import Count
# annotate : ajoutons à chaque objet le nombre d'enregistrements liés
auteurs = Author.objects.annotate(book_count=Count('book'))
for auteur in auteurs:
print(auteur.name, auteur.book_count)
# aggregate : comptons le nombre total de livres de tous les auteurs
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])