我正在尝试制作一个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循环仅循环通过第一个表的第一个单元格。我想不出我在这里做错了什么。
答案 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来担心如何产生循环。