Métodos count e aggregate no Django
Método count
Para calcular a quantidade de registros em um QuerySet, é possível utilizar o método count()
ou sua versão assíncrona acount()
:
from .models import Person
number = Person.objects.count()
print(number)
Esse método é equivalente a uma consulta SQL SELECT COUNT(*)
, o que o torna eficiente ao executar consultas de contagem de registros.
Também é possível calcular a quantidade de registros usando a função len()
, passando um QuerySet previamente carregado:
from .models import Person
people = Person.objects.all()
number = len(people) # Número de registros no conjunto people
print(number)
ℹ️ Quando utilizar
count
oulen
?Se os registros já tiverem sido carregados anteriormente (como ao chamar o método
all()
),len()
é mais eficiente, pois trabalha diretamente com os registros já armazenados em memória, sem executar uma nova consulta ao banco de dados. Por outro lado, se os registros ainda não foram carregados, o métodocount()
é preferível, já que ele realiza a contagem diretamente no banco de dados, sem carregar os registros individualmente.
Método aggregate
O método aggregate()
permite executar funções de agregação, como soma, média, mínimo e máximo, retornando os resultados como valores individuais:
Sum
: Calcula a soma.Avg
: Calcula a média.Min
: Retorna o menor valor.Max
: Retorna o maior valor.
Essas classes recebem como parâmetro o campo sobre o qual o cálculo será realizado. Exemplos de uso:
from .models import Person
from django.db.models import Sum, Avg, Min, Max
# Soma de todas as idades
total_age = Person.objects.aggregate(Sum("age"))
print(total_age)
# Média de idades
avg_age = Person.objects.aggregate(Avg("age"))
print(avg_age)
# Menor idade
min_age = Person.objects.aggregate(Min("age"))
print(min_age)
# Maior idade
max_age = Person.objects.aggregate(Max("age"))
print(max_age)
Esses métodos são úteis para extrair informações como soma, média, mínimo e máximo, sem a necessidade de carregar todos os registros em memória.
Documentação oficial: