2012-10-31 31 views
1

的查詢我有我與PyMySQL執行一個非常簡單的查詢:PyMySQL:有大量行未能

SELECT `id` FROM `records` ORDER BY `id` DESC 

records中有超過150萬行。 id是主鍵。

這是PyMySQL的限制嗎?如果我一次查詢很多行,是否還有其他我應該使用的東西?

+1

什麼叫失敗是什麼意思? –

+0

大約2分鐘後,它會拋出異常,表示連接失敗。 –

+0

請注意,對於較小的查詢(比如500k行),它仍然可以正常工作。所以這與150萬行有關。 –

回答

2

你可以打破查詢分成幾個smaler查詢:

from math import ceil 

batch_size = 1000 

for start_at in range(int(ceil(total_rows/1000 * 1.0))): 
    sql = 'SELECT `id` from `RECORDS` ORDER BY `id` DESC LIMIT %i, %i' 
    sql = sql % (start_at * batch_size, batch_size) 
    # fetch rows 
+0

這正是我目前使用的。有沒有一個不太可靠的方法來做到這一點?當然有一種方法可以用一個查詢來完成它? –

+0

可能是數據庫正在查殺超過2分鐘的任何查詢。如果是這種情況,那麼你將不得不修改你的MySQL配置。我會看到不同的mysql包(如mysql-python)會發生什麼情況。你也可以嘗試使用遊標。 –

+0

有趣的是,當我輸入「SHOW VARIABLES LIKE'wait_timeout';」在MySQL中,它提供了7800,這是至少幾個小時... –