我的sqlite3数据库中出现“数据库表被锁定”错误。我的脚本是单线程的,没有其他应用程序正在使用该程序(我确实在“SQLite Database Browser.exe”中打开了一次)。我复制了文件,del原始(成功)并重命名了副本,所以我知道没有进程锁定它当我运行我的脚本时,表B中的所有内容都无法写入,看起来表A很好。发生了什么事?
CNC中 我修好了但不确定如何。我注意到代码没有做正确的事情(我复制了错误的字段),在修好并清理之后,它神奇地再次开始工作。
-edit2 -
其他人发布了,所以我不妨更新。我认为问题是我正在尝试使用命令/光标进行声明。
答案 0 :(得分:3)
我之前也遇到过这个问题。当光标和连接打开然后程序崩溃然后才能正确关闭它时,通常会发生这种情况。在某些情况下,可以使用以下函数来确保数据库已解锁,即使它未事先正确提交和关闭也是如此:
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()
答案 1 :(得分:2)
也许您的应用程序在SQLite事务开始后提前终止。在目录中查找过时的-journal
文件并删除它们。
也可能值得浏览documentation。
答案 2 :(得分:2)
删除-journal文件听起来不错。请参阅this explanation。
答案 3 :(得分:0)
当db文件位于NFS安装的文件系统上时,我也看到了这个错误。