django - django API视图分页的性能
问题描述
我是 python django 的新手。我正在使用 APIView。我正在查看分页代码。我查看了许多代码,但在所有这些代码中,我都有一个担忧。
他们都从表中获取所有数据,然后对这些数据进行分页。
zones = Zone.objects.all()
paginator = Paginator(zones, 2)
page = 2
zones = paginator.page(page)
serializer = ZoneSerializer(zones, many=True)
return {"data": serializer.data, 'count': zones.paginator.count, "code": status.HTTP_200_OK, "message": 'OK'}
我的期望是我没有得到所有记录,然后使用分页器进行分页。否则我将不得不编写自己的代码来处理它。
解决方案
它从数据库中获取所有记录是不正确的。
看看这个(使用 django shell)。注意LIMIT
:
from django.db import connection
from apps.question.models import Question
from django.core.paginator import Paginator
p = Paginator(Question.objects.all(),2)
print(connection.queries)
[]
p.page(1)[0] # Accessing one element in page
print(connection.queries)
[{'sql': 'SELECT COUNT(*) AS "__count" FROM "question"',
'time': '0.001'},
{'sql': 'SELECT <all fields> FROM "question" ORDER BY "question"."id" DESC LIMIT 2',
'time': '0.000'},
]
注意:我从第二个查询中删除了所有字段的列表,所以它很适合这里。
推荐阅读
- api - spotify api 未提供令牌,错误 401,从 httparty 获取艺术家
- electron - 电子应用程序中的 net::ERR_CACHE_READ_FAILURE
- python - 在包含 JSON 和文本结构的 txt 文件中解析 JSON 结构
- python - 使用python替换图像中的白色行
- angular - 如何在 Angular 6 中首次加载时获取 URL 的片段
- php - 如何在 Drupal 8 中访问 Drupal 用户对象中的自定义字段属性
- php - Prestashop 1.7.3.0 上的促销页面问题
- hadoop - 如何在 Oozie 中执行一项特定的工作流操作。如果我手动杀死了 Oozie 工作流程?
- windows - 如何显示格式化的月份名称?
- javascript - 使用 for 循环循环多个变量?