gpt4 book ai didi

python - Django 是否会为分页器功能获取所有数据库对象并使其效率低下?

转载 作者:行者123 更新时间:2023-11-30 21:53:43 26 4
gpt4 key购买 nike

from django.core.paginator import Paginator
from .model import blog

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

以上代码来自Django官方分页文档。有人可以解释一下这为什么效率不低如果我有一个包含很多记录的表?上面的代码不是从数据库中获取所有内容然后将其删除吗?破坏了分页的目的...

最佳答案

Can somebody please explain me how this is not inefficient If I have a table with many records?

<强> QuerySet blog.objects.all()不会从数据库中检索记录,除非您“使用”QuerySet 。但您没有这样做,因此分页器也不会这样做。您可以通过迭代查询集来“使用”查询集,调用 len(..)将其转换为 str(..) ing,以及一些其他功能。但只要你不这样做。 QuerySet只是一个表示 Django 将在必要时执行的“查询”的对象。

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

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

关于python - Django 是否会为分页器功能获取所有数据库对象并使其效率低下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com