當您使用cursor.fetchmany()
您不必再頒發SELECT
聲明。光標跟蹤你是在一系列成果的地方,而你需要做的就是再次調用c.fetchmany(100)
直到產生一個空的結果:
c.execute('SELECT words FROM testWords')
while True:
batch = c.fetchmany(100)
if not batch:
break
# each batch contains up to 100 rows
或使用iter()
function(可用於重複調用一個函數,直至達到定點結果):
c.execute('SELECT words FROM testWords')
for batch in iter(lambda: c.fetchmany(100), []):
# each batch contains up to 100 rows
如果你不能保持光標(說的保持,因爲你所服務的Web請求),然後使用cursor.fetchmany()
是錯誤的接口。您將不得不通過SELECT
語句僅使用LIMIT
syntax返回選定的行窗口。 LIMIT
有一個可選的OFFSET
關鍵字,這兩個關鍵字一起指定要在哪一行開始以及返回多少行。要確保你的SELECT
聲明有序所以你得到一個穩定的結果集,那麼你可以切成批次
注意。
batchsize = 1000
offset = 0
while True:
c.execute(
'SELECT words FROM testWords LIMIT ? OFFSET ?',
(batchsize, offset))
batch = list(c)
offset += batchsize
if not batch:
break
的offset
值傳遞給下一個調用你的代碼,如果你以後需要在其他地方,然後把這些批次的簡歷。
那麼當你再次調用'c.fetchmany(100)'*時發生了什麼? –