2024-10-01 11:23:04 发布
网友
目前,我的数据库已经填充了1000行。在
我要选择前100行,然后选择下100行,然后再选择下100行,依此类推。。。在
到目前为止,我已经:
c.execute('SELECT words FROM testWords') data = c.fetchmany(100)
这使我可以获得前100行,但是,我无法找到选择后面100行的语法,使用另一条SELECT语句。在
SELECT
我已经看到在其他编码语言中也是可能的,但是还没有找到Python的SQLite3的解决方案。在
使用cursor.fetchmany()时,不必发出另一条SELECT语句。光标将跟踪您在结果序列中的位置,您只需再次调用c.fetchmany(100),直到生成空结果:
cursor.fetchmany()
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
或使用^{} function(可用于反复调用函数,直到达到sentinel结果):
如果不能保持光标不变(例如,因为您正在处理web请求),那么使用cursor.fetchmany()是错误的接口。您将不得不使用^{} syntax告诉SELECT语句只返回一个选定的行窗口。LIMIT有一个可选的OFFSET关键字,这两个关键字一起指定从哪一行开始以及返回多少行。在
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值传递给对代码的下一个调用。在
offset
sqlite3与Python无关。它是一个独立的数据库;Python只提供了一个接口。在
作为一个普通的数据库,sqlite支持标准SQL。在SQL中,可以使用LIMIT和OFFSET来确定查询的开始和结束。请注意,如果您这样做,您应该真正使用显式ORDER BY子句,以确保查询之间的结果顺序一致。在
c.execute('SELECT words FROM testWords ORDER BY ID LIMIT 100') ... c.execute('SELECT words FROM testWords ORDER BY ID LIMIT 100 OFFSET 100')
您可以装箱迭代器并多次调用它:
def ResultIter(cursor, arraysize=100): while True: results = cursor.fetchmany(arraysize) if not results: break for result in results: yield result
使用
cursor.fetchmany()
时,不必发出另一条SELECT
语句。光标将跟踪您在结果序列中的位置,您只需再次调用c.fetchmany(100)
,直到生成空结果:或使用^{} function (可用于反复调用函数,直到达到sentinel结果):
^{pr2}$如果不能保持光标不变(例如,因为您正在处理web请求),那么使用} syntax 告诉
cursor.fetchmany()
是错误的接口。您将不得不使用^{SELECT
语句只返回一个选定的行窗口。LIMIT
有一个可选的OFFSET
关键字,这两个关键字一起指定从哪一行开始以及返回多少行。在请注意,您需要确保您的
SELECT
语句是有序的,这样您就可以获得一个稳定的结果集,然后将其分割成多个批。在如果您需要将这些批处理发送到其他地方,然后在以后继续时,将
offset
值传递给对代码的下一个调用。在sqlite3与Python无关。它是一个独立的数据库;Python只提供了一个接口。在
作为一个普通的数据库,sqlite支持标准SQL。在SQL中,可以使用LIMIT和OFFSET来确定查询的开始和结束。请注意,如果您这样做,您应该真正使用显式ORDER BY子句,以确保查询之间的结果顺序一致。在
您可以装箱迭代器并多次调用它:
相关问题 更多 >
编程相关推荐