我有一个原始查询,例如:
# 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
我想知道如何获取总行数用于分页。
请您参考如下方法:
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() 执行以返回实际计数。
