首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlit&Python:为循环退出

Sqlit&Python:为循环退出
EN

Stack Overflow用户
提问于 2015-03-09 11:00:06
回答 2查看 71关注 0票数 1

当第二个循环完成时,请有人解释为什么第一个循环会被退出。首先,我获得数据库中的所有表名(总计4个结果),然后从该表中获取所有数据。

但出于某种原因,我只能从第一张表中得到数据。如果我删除从表中获取数据的循环,那么它将一直运行第一个for循环直到结束。

代码语言:javascript
复制
#Get all tables in database file
for tablename in c.execute("SELECT name FROM sqlite_master WHERE type='table';"):
    print(tablename[0])

    for elementdate in c.execute('SELECT * FROM %s ORDER BY Date DESC' % tablename[0]):
        print(elementdate)

Output:
table_1
(1, '20120210', 360)
(2, '20100210', 204)
Loop Excited

相同的代码,只是没有持久的循环

代码语言:javascript
复制
#Get table names
for tablename in c.execute("SELECT name FROM sqlite_master WHERE type='table';"):
    print(tablename[0])

    #for elementdate in c.execute('SELECT * FROM %s ORDER BY Date DESC' % tablename[0]):
    #   print(elementdate)

Output:
table_1
table_2
table_3
table_4
Loop Excited

我是否发现了错误,还是我只是个傻瓜?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-09 11:13:16

在获取第一个游标的结果之前,不应该在同一个游标中执行少量查询:

代码语言:javascript
复制
c.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = c.fetchall()
for tablename in tables:
    print(tablename[0])
    c.execute('SELECT * FROM %s ORDER BY Date DESC' % tablename[0])
    for elementdate in c.fetchall():
        print(elementdate)
票数 2
EN

Stack Overflow用户

发布于 2015-03-09 11:28:48

单个游标对象一次只处理一个查询;execute()覆盖以前的任何结果。

如果要同时执行两个查询,请使用两个游标:

代码语言:javascript
复制
c = db.cursor()
c2 = db.cursor()
for row in c.execute("SELECT name FROM sqlite_master WHERE type='table'"):
    tablename = row[0]
    for row2 in c2.execute("SELECT * FROM %s ORDER BY Date DESC" % tablename):
        ...

注意:在对表的其他查询仍在运行时修改表是个坏主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28940354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档