Какой метод QuerySet в Django используется для подсчета количества записей?

«Какой метод QuerySet в Django используется для подсчета количества записей?» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для подсчета количества записей в QuerySet используется метод .count().

Он выполняет в базе данных оптимизированный SQL-запрос SELECT COUNT(*) и возвращает целочисленное значение, не загружая сами объекты в память.

Пример:

from myapp.models import Product

# Количество всех продуктов
all_products_count = Product.objects.count()

# Количество активных продуктов
active_products_count = Product.objects.filter(is_active=True).count()

count() vs len() — в чем разница?

  • queryset.count(): Эффективный способ. Выполняет один SQL-запрос COUNT(*) на стороне БД. Идеально для получения только количества.
  • len(queryset): Неэффективный способ. Сначала загружает все объекты из БД в память Python, а затем вычисляет их количество. Это может привести к большому потреблению памяти и медленной работе при большом объеме данных.

Используйте len(queryset) только в том случае, если вы все равно собираетесь итерировать этот QuerySet и вам нужны сами объекты.