Sobes.tech
Junior — Middle

Qual é a principal diferença entre as funções annotate e aggregate no Django ORM ao executar consultas?

sobes.tech IA

Resposta da IA

No Django ORM, as funções annotate e aggregate são usadas para trabalhar com dados agregados, mas têm objetivos diferentes:

  • annotate adiciona campos calculados a cada objeto no QuerySet. Ou seja, a cada registro é adicionado um campo adicional com o resultado de uma função de agregação.

  • aggregate calcula um valor agregado para todo o QuerySet e retorna um dicionário com os resultados, sem ligação a objetos individuais.

Exemplo:

from django.db.models import Count

# annotate: adicionamos a cada objeto o número de registros relacionados
autores = Author.objects.annotate(book_count=Count('book'))
for autor in autores:
    print(autor.name, autor.book_count)

# aggregate: contamos o número total de livros de todos os autores
total_libros = Author.objects.aggregate(total=Count('book'))
print(total_libros['total'])