Django原始查询总数

时间:2014-02-06 13:16:03

标签: python django

我有一个原始查询,例如:

# Table posts = 420 rows
>>> cursor = connection.cursor()
>>> posts = Post.objects.raw('SELECT SQL_CALC_FOUND_ROWS posts.* FROM posts LIMIT 1,10')
>>> found_rows = cursor.execute("SELECT FOUND_ROWS()")
>>> print found_rows()
1

我想知道如何获取用于分页的总行数。

1 个答案:

答案 0 :(得分:2)

Post.objects.raw()不执行查询 - 它只返回RawQuerySet个实例。实际查询只会在您尝试迭代RawQuerySet后执行(例如,通过在代码中调用next(iter(posts)))。

由于您将查询限制为仅10个结果,因此您可能只需将列表中的所有实例拉出来:

posts = list(Post.objects.raw('SELECT SQL_CALC_FOUND_ROWS posts.* FROM posts LIMIT 1,10'))

这将确保您的查询已经为下一个SELECT FOUND_ROWS()执行,以返回实际的数量。