Sobes.tech
Junior — Middle

Jaka jest główna różnica między funkcjami annotate a aggregate w Django ORM podczas wykonywania zapytań?

sobes.tech AI

Odpowiedź od AI

W Django ORM funkcje annotate i aggregate służą do pracy z danymi agregowanymi, ale mają różne cele:

  • annotate dodaje obliczone pola do każdego obiektu w QuerySet. Oznacza to, że do każdego rekordu dodawane jest dodatkowe pole z wynikiem funkcji agregującej.

  • aggregate oblicza wartość agregowaną dla całego QuerySet i zwraca słownik z wynikami, bez powiązania z poszczególnymi obiektami.

Przykład:

from django.db.models import Count

# annotate: dodajemy do każdego obiektu liczbę powiązanych rekordów
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
    print(author.name, author.book_count)

# aggregate: liczymy łączną liczbę książek wszystkich autorów
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])