Django:如何计算查询集并返回切片而不会两次击中DB?

时间:2015-06-04 20:16:37

标签: python mysql django

我的API中有这部分代码,最近已成为一个瓶颈:

total = results.count()
if request.GET.has_key('offset'):
    offset = int(request.GET.get('offset').strip())
    results = results.order_by('name')[100*offset:100*(offset+1)]
people = list(results)

请注意,results是所有人的查询集,offset是用于分页的参数。

在这里,我可以看到,当我打印connection.queries时,我的数据库会被.count()list(results)两次点击。 .count()必须处于最顶层的原因是因为我需要所有人的长度(不是100)。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

也许是这样的?:

allpeople = list(results.order_by('name'))
total = len(allpeople)
if request.GET.has_key('offset'):
    offset = int(request.GET.get('offset').strip())
    results = allpeople[100*offset:100*(offset+1)]
people = results

请注意,如果people = results未触发,if request.GET....:将会失败。