目前我的数据库已经填满了1000行.
我想选择前100行,然后选择下一个100,然后选择下一个100,依此类推......
到目前为止,我有:
c.execute('SELECT words FROM testWords')
data = c.fetchmany(100)
Run Code Online (Sandbox Code Playgroud)
这允许我获得前100行,但是,我找不到使用另一个SELECT语句选择接下来的100行的语法.
我已经看到它可以用其他编码语言,但还没有找到Python的SQLite3的解决方案.
当您使用时,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
Run Code Online (Sandbox Code Playgroud)
或使用该iter()函数(可用于重复调用函数,直到达到标记结果):
c.execute('SELECT words FROM testWords')
for batch in iter(lambda: c.fetchmany(100), []):
# each batch contains up to 100 rows
Run Code Online (Sandbox Code Playgroud)
如果您不能保持光标(例如,因为您正在提供Web请求),那么使用cursor.fetchmany()是错误的接口.相反,您必须SELECT使用LIMIT语法告诉语句只返回选定的行窗口.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
Run Code Online (Sandbox Code Playgroud)
通offset值到下一个调用你的代码,如果你以后需要在其他地方,然后把这些批次的简历.