热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《SQLite3如何从数据库中选择前100行,然后是下一个100行》经验,为你挑选了1个好方法。

目前我的数据库已经填满了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值到下一个调用你的代码,如果你以后需要在其他地方,然后把这些批次的简历.


推荐阅读
author-avatar
个信2502857367
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有