2014-02-06 64 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()返回執行實際數量。