在SQLite表中遍历行时,是否可以删除游标所在的行?

wlp8pajw  于 2023-05-18  发布在  SQLite
关注(0)|答案(2)|浏览(135)

我知道你可以做DELETE FROM table WHERE condition,但我想知道是否有一个更优雅的方式?由于我使用c.execute('SELECT * FROM {tn}'.format(tn=table_name1))遍历每一行,因此光标已经在我想要删除的行上。

iklwldmw

iklwldmw1#

游标是只读对象,游标行不一定与表行相关。所以这是不可能的。
并且在迭代时不能更改表。SQLite按需计算结果行,因此删除当前行可能会中断下一行的计算。

llycmphe

llycmphe2#

文档https://sqlite.org/isolation.html解释了如果应用程序在打开游标的迭代过程中执行更新会发生什么。通常情况下:数据库不会中断,但您的查询可能会也可能不会收到已更新或删除的行的新副本。一些特定的操作被记录为“安全的”,甚至不受该级别的未定义行为(例如,通过rowid删除已处理的行)。

相关问题