SQLite3如何从数据库中选择前100行,然后选择下100行

2024-10-01 11:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我的数据库已经填充了1000行。在

我要选择前100行,然后选择下100行,然后再选择下100行,依此类推。。。在

到目前为止,我已经:

c.execute('SELECT words FROM testWords')
data = c.fetchmany(100)

这使我可以获得前100行,但是,我无法找到选择后面100行的语法,使用另一条SELECT语句。在

我已经看到在其他编码语言中也是可能的,但是还没有找到Python的SQLite3的解决方案。在


Tags: from语言数据库编码executedata语法语句
3条回答

使用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

或使用^{} function(可用于反复调用函数,直到达到sentinel结果):

^{pr2}$

如果不能保持光标不变(例如,因为您正在处理web请求),那么使用cursor.fetchmany()是错误的接口。您将不得不使用^{} syntax告诉SELECT语句只返回一个选定的行窗口。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值传递给对代码的下一个调用。在

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

相关问题 更多 >