﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35733	Page.__len__ could skip a query if self.paginator.count == 0	Jacob Walls	Jacob Walls	"With code like this,
{{{
paginator = Paginator(unevaluated_queryset, 25)
page = paginator.get_page(1)  # causes count query via validate_number()
if not page:  # causes select query
    return {}
}}}
I get an additional query versus:
{{{
paginator = Paginator(unevaluated_queryset, 25)
if not paginator.count:  # causes count query
    return {}
}}}

----
In the case of no data, the second SELECT query is unnecessary if we already know the paginator is empty. Since `paginator.count` is cached, would it be worth optimizing out this additional query? Otherwise, you have to dig into the internals to discover that the two examples above do not perform equivalently.

{{{#!diff
diff --git a/django/core/paginator.py b/django/core/paginator.py
index 7b3189cc8b..334166636d 100644
--- a/django/core/paginator.py
+++ b/django/core/paginator.py
@@ -188,6 +188,8 @@ class Page(collections.abc.Sequence):
         return ""<Page %s of %s>"" % (self.number, self.paginator.num_pages)
 
     def __len__(self):
+        if self.paginator.count == 0:
+            return 0
         return len(self.object_list)
 
     def __getitem__(self, index):
}}}"	Cleanup/optimization	closed	Core (Other)	dev	Normal	invalid			Accepted	0	0	0	0	0	0
