我的sqlite3 db中出现“database table is locked”错误。我的脚本是单线程的,没有其他应用程序正在使用该程序(我在“sqlite database browser.exe”中打开过一次)。我复制了文件,删除了原始文件(成功),并重新命名了副本,这样我就知道当我运行脚本时,还没有进程锁定它,表B中的所有内容都无法写入,看起来表A很好。发生什么事了?
-编辑-
我修好了,但不确定怎么修好。我注意到代码没有做正确的事情(我复制了错误的字段),在修复和清理它之后,它神奇地开始工作。
-编辑2-
有人发了帖子,我不妨更新一下。我想问题是我试图用一个正在使用的命令/光标做一个语句。

最佳答案

我以前也遇到过这个问题当光标和连接处于打开状态时,通常会发生这种情况,然后程序在正确关闭之前崩溃。在某些情况下,可以使用以下函数来确保数据库已解锁,即使在未正确提交并提前关闭数据库之后也是如此:

from sqlite3 import dbapi2 as sqlite


def unlock_db(db_filename):
    """Replace db_filename with the name of the SQLite database."""
    connection = sqlite.connect(db_filename)
    connection.commit()
    connection.close()

10-07 19:33
查看更多