2014-02-06 65 views
1

我有一个原始查询,例如: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 

我想知道如何获得行的总数是分页。

回答

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