作者:个信2502857367 | 来源:互联网 | 2023-02-06 11:44
目前我的数据库已经填满了1000行.
我想选择前100行,然后选择下一个100,然后选择下一个100,依此类推......
到目前为止,我有:
c.execute('SELECT words FROM testWords')
data = c.fetchmany(100)
这允许我获得前100行,但是,我找不到使用另一个SELECT
语句选择接下来的100行的语法.
我已经看到它可以用其他编码语言,但还没有找到Python的SQLite3的解决方案.
1> Martijn Piet..:
当您使用时,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()
函数(可用于重复调用函数,直到达到标记结果):
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
语法告诉语句只返回选定的行窗口.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
值到下一个调用你的代码,如果你以后需要在其他地方,然后把这些批次的简历.