Skip to main content
 首页 » 编程设计

python之Django 原始查询总数

2024年11月01日23daizhj

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

# 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() 执行以返回实际计数。