我知道你可以做DELETE FROM table WHERE condition,但我想知道是否有一个更优雅的方式?由于我使用c.execute('SELECT * FROM {tn}'.format(tn=table_name1))遍历每一行,因此光标已经在我想要删除的行上。
DELETE FROM table WHERE condition
c.execute('SELECT * FROM {tn}'.format(tn=table_name1))
iklwldmw1#
游标是只读对象,游标行不一定与表行相关。所以这是不可能的。并且在迭代时不能更改表。SQLite按需计算结果行,因此删除当前行可能会中断下一行的计算。
llycmphe2#
文档https://sqlite.org/isolation.html解释了如果应用程序在打开游标的迭代过程中执行更新会发生什么。通常情况下:数据库不会中断,但您的查询可能会也可能不会收到已更新或删除的行的新副本。一些特定的操作被记录为“安全的”,甚至不受该级别的未定义行为(例如,通过rowid删除已处理的行)。
2条答案
按热度按时间iklwldmw1#
游标是只读对象,游标行不一定与表行相关。所以这是不可能的。
并且在迭代时不能更改表。SQLite按需计算结果行,因此删除当前行可能会中断下一行的计算。
llycmphe2#
文档https://sqlite.org/isolation.html解释了如果应用程序在打开游标的迭代过程中执行更新会发生什么。通常情况下:数据库不会中断,但您的查询可能会也可能不会收到已更新或删除的行的新副本。一些特定的操作被记录为“安全的”,甚至不受该级别的未定义行为(例如,通过rowid删除已处理的行)。