python - sqlite 嵌套 for 循环错误

标签 python sqlite iterator cursor

我正在尝试制作一个聊天机器人,但遇到了一个小问题。我在 python 中有一个嵌套或循环,它应该循环遍历一个包含其他表的所有名称的 sqlite 表。内部 for 循环循环遍历第一个循环内的表格,迭代单元格。

for i in c.execute("""SELECT * FROM triggers_sql"""):
    for l in c.execute("""SELECT * FROM "{}" """.format(i)):
        print(i, l)

但是,由于某种原因,外部 for 循环仅循环第一个表的第一个单元格。我想不出我在这里做错了什么。

最佳答案

您需要使用两个单独的光标来执行此操作。游标代表单个结果集,内部 c.execute() 清除外部循环附加到游标的结果集。

如果c是一个连接对象,您需要从中显式创建游标:

outercursor = c.cursor()
for tablename, in outercursor.execute("SELECT tablename FROM triggers_sql"):
    innercursor = c.cursor()
    for row in innercursor.execute('SELECT * FROM "{}"'.format(tablename)):
        # ...

如果c是一个游标对象,只需从连接中创建另一个游标对象即可。您甚至可以使用现有光标来执行此操作:

innercursor = c.connection.cursor()

请注意,可能有更好的方法来构建数据库,您不必首先使用动态表名。将您现在使用单独表存储的所有内容存储在单个表中,并用一个额外的列替换表名。此时,您可以使用 JOIN 并将其留给 sqlite 来担心如何生成循环。

关于python - sqlite 嵌套 for 循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697638/

相关文章:

java - 来自 Java Runnable 的 Py4J 回调

c++ - SQLite C++ 按名称访问列

python - 在 Python 中按排序顺序从排序的迭代器中产生?

python - python中[iter(list)]*2的含义是什么?

iterator - 如何在堆栈上创建按值迭代器?

python - step_size为0的滑动窗口算法怎么写?

Python Plot 无法正常工作

python - 从 except 子句中引发异常

sqlite - 如何管理桌面文件数据库版本?

java - 是否可以对 ORMLite 和 Jackson JSON 使用一个类?