Django分页。如果我有100万行怎么办?

时间:2014-05-23 00:52:34

标签: python django optimization pagination

Django官方文档为我们提供了类似的内容:

from django.core.paginator import Paginator
my_list = MyModel.objects.all()
p = Paginator(my_list, 10)

但是。如果我必须对100万行进行分页怎么办?每次我想查看单个分页页面时,使用MyModel.objects.all()加载100万行效率不高。

有没有更有效的方法来执行此操作而无需调用objects.all()来进行简单的分页?

1 个答案:

答案 0 :(得分:5)

MyModel.objects.all()实际上并没有加载所有对象。它可能会加载所有这些,但在您实际执行需要对其进行评估的操作之前,它不会做任何事情。

Paginator几乎肯定会对该查询集添加一些限制。例如,使用数组切片表示法,它可以创建一个新对象,比如

my_list = MyModel.objects.all()
smaller_list = my_list[100:200]

这将创建一个不同的查询集,它只会从数据库中请求100个项目。或者在原始查询集上调用.count(),这只会指示数据库返回表中的行数。

你必须做一些需要检索所有对象的事情,比如调用

list(my_list)

将1000000行从数据库传输到Python。