Django API视图分页的性能

时间:2019-07-16 13:35:38

标签: django django-rest-framework

我是python django的新手。我正在使用API​​View。我正在查看分页代码。我浏览了许多代码,但在所有这些代码中,我都有一个担忧。

他们都从表中获取所有数据,然后对这些数据进行分页。

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'}

我的期望是我没有得到所有记录,然后使用分页器进行分页。否则,我将不得不编写自己的代码来处理它。

1 个答案:

答案 0 :(得分:2)

它不是从数据库中获取所有记录。

看看这个(使用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'},
]

注意:我从第二个查询中删除了所有字段的列表,因此很适合这里。