Эффективно подсчитываем запрос фильтра в django - PullRequest
1 голос
/ 25 мая 2010

Новичок Django здесь, мне нужно сделать подсчет определенного фильтра в модели Django. Если я сделаю это так: my_model.objects.filter (...). Count () Я предполагаю, что он выполняет SQL-запрос, который извлекает все строки, и только после этого считает. Насколько мне известно, гораздо эффективнее выполнять подсчет без извлечения этих строк, например, "SELECT COUNT (*) FROM ...". Есть ли способ сделать это в Django?

1 Ответ

2 голосов
/ 25 мая 2010

Я предполагаю, что он выполняет SQL-запрос, который извлекает все строки, и только после этого счетчик

Это неверное предположение. Из Django справка API набора запросов для count()

count() выполняет SELECT COUNT(*) за кадром

Как правило, QuerySets являются ленивыми - создание QuerySet не требует каких-либо действий с базой данных. Вы можете объединять фильтры весь день, и Django не будет выполнять запрос до тех пор, пока не будет оценен QuerySet.

...