python – Django:如何计算一个查询集并返回一个切片而不是两次击中DB?

我的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)

请注意,结果是所有人的查询集,而offset是用于分页的参数.在这里,我可以看到,当我打印connection.queries时,我的数据库被.count()和list(结果)两次命中.之所以.count()必须在顶部是因为我需要所有人的长度(不是100).有没有办法解决这个问题?

最佳答案
也许这样的事情?:

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

请记住,如果request.GET ….:不会触发,那么人们=结果将会失败.

转载注明原文:python – Django:如何计算一个查询集并返回一个切片而不是两次击中DB? - 代码日志