Sobes.tech
Junior — Middle

Aký je hlavný rozdiel medzi funkciami annotate a aggregate pri vykonávaní dotazov v Django ORM?

sobes.tech AI

Odpoveď od AI

V Django ORM sa používajú funkcie annotate a aggregate na prácu s agregovanými údajmi, ale majú odlišné účely:

  • annotate pridáva vypočítané polia ku každému objektu v QuerySet. To znamená, že ku každému záznamu sa pridá ďalšie pole s výsledkom agregačnej funkcie.

  • aggregate vypočíta agregačnú hodnotu pre celý QuerySet a vráti slovník s výsledkami, bez väzby na jednotlivé objekty.

Príklad:

from django.db.models import Count

# annotate: pridávame ku každému objektu počet súvisiacich záznamov
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
    print(author.name, author.book_count)

# aggregate: počítame celkový počet kníh všetkých autorov
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])