当您使用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)'*时发生了什么? –