SQLite 嵌套用于循环错误



我正在尝试制作一个聊天机器人,但我遇到了一个小问题。我在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 来担心如何生成循环。

最新更新