我有一个原始查询,例如:
# 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
我想知道如何获取用于分页的总行数。
答案 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()
执行,以返回实际的数量。