sqlite嵌套循环错误

时间:2018-10-08 07:47:35

标签: python sqlite iterator cursor

我正在尝试制作一个ChatBot,但遇到一个小问题。我在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循环仅循环通过第一个表的第一个单元格。我想不出我在这里做错了什么。

1 个答案:

答案 0 :(得分:3)

您需要使用两个单独的游标来执行此操作。游标表示单个结果集,内部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来担心如何产生循环。