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:
-
annotateadiciona 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. -
aggregatecalcula 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'])