Кэширует ли использование queryset.count() набор запросов?
Я делаю некоторую фильтрацию в моей конечной точке, и один из фильтров применяется только в том случае, если отфильтрованный набор запросов содержит более 30 элементов.
yesterday_date = timezone.now() - timezone.timedelta(days=1)
if query_dict.get("active"):
active_query = cleaned_query.filter(created_at__gt=yesterday_date)
if active_query.count() > 30:
cleaned_query = active_query
else:
cleaned_query = cleaned_query[:30]
Я сомневаюсь, будет ли метод .count() уже оценивать и кэшировать набор запросов или мне следует использовать len(queryset), чтобы избежать повторного попадания в базу данных в случае, если он больше 30?
Если вы проверите документацию django о When Querysets Are Evaluated
Вы увидите некоторую информацию о подсчете...
Примечание: Если вам нужно определить только количество записей в наборе (и вам не нужны фактические объекты), гораздо эффективнее будет обрабатывать подсчет на уровне базы данных, используя SQL SELECT COUNT(*). Django предоставляет метод count() именно по этой причине.
Так что count()
не оценивает множество, тогда как len()
оценивает.