Последнее обновление: 26.08.2022

Количество объектов

Для вычисления количества объектов у QuerySet применяется метод count() и его асинхронная версия acount():

from .models import Person
 
number = Person.objects.count()
print(number)

На уровне базы данных метод транслируется в SQL-выражение SELECT COUNT(*)

В Django для подсчета количества объектов также может использоваться функция len(). В нее передается QuerySet, для которого надо вычислить количество объектов.

from .models import Person
 
people = Person.objects.all()
number = len(people)    # количество объектов в наборе people
print(number)

Что использовать: count или len? Если объекты уже ранее были загружены (например, с помощью метода all()), то оптимальнее использовать функцию len(), которая не выполняет к базе данных запрос SQL, а работает с уже загруженным набором объектов. Если же объекты ранее НЕ были загружены, то лучше выполнить метод count(), для которого не потребуется загружать все объекты из бд.

Метод aggregate

Агрегатные операции позволяют получить одно скалярное значение, подсчитанное на наборе данных по определенному критерию. Для выполнения агрегатных операций применяется метод aggregate, который принимает один из объектов следующих классов:

  • Avg: вычисляет среднее значение

  • Min: вычисляет минимальное значение

  • Max: вычисляет максимальное значение

  • Sum: вычисляет сумму

В качестве одного из параметров конструкторы этих классов принимают выражение - обычно свойство, по которому вычисляется значение:

from .models import Person 
from django.db.models import Avg, Min, Max, Sum

# средний возраст
avg_age = Person.objects.aggregate(Avg("age"))
print(avg_age)

# минимальный возраст
min_age = Person.objects.aggregate(Min("age"))
print(min_age)

# максимальный возраст
max_age = Person.objects.aggregate(Max("age"))
print(max_age)

# сумма всех возрастов
sum = Person.objects.aggregate(Sum("age"))
print(sum)
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850