Python django核心分页是否首先检索所有数据?
我正在使用django 1.5。我需要将页面拆分为数据。我读文件。我不确定它是否首先检索所有数据。因为我有一张很大的桌子,所以最好使用类似“limit”的东西。谢谢 编辑 我正在ModelManager中使用queryset 例如:Python django核心分页是否首先检索所有数据?,python,django,pagination,django-1.5,Python,Django,Pagination,Django 1.5,我正在使用django 1.5。我需要将页面拆分为数据。我读文件。我不确定它是否首先检索所有数据。因为我有一张很大的桌子,所以最好使用类似“limit”的东西。谢谢 编辑 我正在ModelManager中使用queryset 例如: class KeywordManager(models.Manager): def currentkeyword(self, kw, bd, ed): wholeres = super(KeywordManager, self).get_q
class KeywordManager(models.Manager):
def currentkeyword(self, kw, bd, ed):
wholeres = super(KeywordManager, self).get_query_set() \
.values("sc", "begindate", "enddate") \
.filter(keyword=kw, begindate__gte=bd, enddate__lte=ed) \
.order_by('enddate')
return wholeres
首先,
queryset
是一个惰性对象,django将在您请求数据时立即检索数据,但如果您不这样做,django将不会命中数据库。如果在查询集上使用任何列表方法,如len()
,则将计算所有查询集并强制django检索所有数据
如果将
queryset
传递给分页器,它将不会检索所有数据,因为正如docs所说,如果传递queryset,它将使用.count()方法避免将queryset
转换为列表和使用len()
方法 如果数据不是来自数据库,则是-Paginator必须首先加载所有信息,以确定如何“拆分”它
如果没有,并且只是使用Django自动生成的SQL与数据库交互,则分页器将执行查询以确定数据库中的项目数(即SQLCOUNT()
),并使用您提供的值确定要生成的页面数。示例:count()
返回43,您需要10个结果的页面-生成的页面数等于:43%10+1=5
我添加了编辑。如果我使用p=Paginator(KeywordMdl.keywordmgr.currentkeyword(…),10),Paginator将在每次更改页面时从数据库中检索10行,对吗@利维