Python Django是否为paginator函数获取所有数据库对象并使其效率低下?

Python Django是否为paginator函数获取所有数据库对象并使其效率低下?,python,django,Python,Django,以上代码来自Django官方分页文档。 有人能给我解释一下这不是低效的吗 如果我有一张有很多记录的桌子?上面的代码不是从数据库中获取所有内容,然后将其切掉吗?正在破坏分页的目的 有人能解释一下,如果我有一个有很多记录的表,这是如何不低效的吗 查询集是懒惰的。blog.objects.all()将不会从数据库中检索记录,除非您“使用”了QuerySet。但是你没有那样做,而且抄本者也不会那样做。您可以通过对查询集进行迭代、对其调用len(..)、将其转换为str(..)ing以及其他一些函数来“使

以上代码来自Django官方分页文档。 有人能给我解释一下这不是低效的吗 如果我有一张有很多记录的桌子?上面的代码不是从数据库中获取所有内容,然后将其切掉吗?正在破坏分页的目的

有人能解释一下,如果我有一个有很多记录的表,这是如何不低效的吗

查询集
是懒惰的
blog.objects.all()
将不会从数据库中检索记录,除非您“使用”了
QuerySet
。但是你没有那样做,而且抄本者也不会那样做。您可以通过对查询集进行迭代、对其调用
len(..)
、将其转换为
str(..)
ing以及其他一些函数来“使用”查询集。但只要你不这样做。
QuerySet
只是一个表示Django将在必要时执行的“查询”的对象

Paginator
将构造一个
QuerySet
,它是您传递的QuerySet的切片变体。它将首先调用
queryset.count()
来检索对象的数量,从而从…查询中进行
SELECT count(*)(因此我们不检索元素本身),然后使用一个切片变量,看起来像
queryset[:2]
,看起来像
SELECT…FROM…LIMIT 2
。执行计数以确定存在的页数

简言之,它将因此构造新的查询,并在数据库上执行这些查询。通常,这些限制返回的数据量。

No它不会获取所有项目。请注意,查询集是惰性的:它将简单地对查询集进行切片,从而使用
限制执行查询。。。偏移量…
。和
from django.core.paginator import Paginator
from .model                import blog

b = blog.objects.all()
p = Paginator(b, 2)