在 IPython 笔记本实例中通过 SQLAlchemy 连接时出现OperationalError: (OperationalError) database is locked
错误,我不知道为什么。
我使用 SQLAlchemy 和 Declarative Base 语法为 SQLite 数据库编写了 Python 接口。我将数据库模型导入 IPython 笔记本以探索数据。今天早上这工作得很好。这是代码:
from psf_database_interface import session, PSFTable
query = session.query(PSFTable).first()
但是今天下午,在我关闭运行 IPython 的笔记本电脑后(它重新启动服务器就好了),我开始收到这个错误。这很奇怪,因为我仍然可以从 SQLite3 命令行工具打开数据库并查询数据。我不希望任何其他进程连接到该数据库并fuser
在该数据库上运行确认这一点。我的应用程序没有使用任何并发进程(在我编写的代码中,如果某些东西隐藏在 SQLAlchemy 或 IPython 中,则为 IDK),即使我只是在执行读取操作,SQLite 确实支持并发。
我尝试重新启动 IPython 内核以及终止并重新启动 IPython 笔记本服务器。我已经尝试创建数据库的备份并按照此处的建议用备份替换数据库:https ://stackoverflow.com/a/2741015/1216837 。最后,出于绝望,我尝试添加以下内容以查看是否可以以某种方式清除会话中卡住的内容:
print session.is_active
session.flush()
session.close()
session.close_all()
print session.is_active
哪个返回True
和True
。有任何想法吗?
更新:我可以在没有任何问题的情况下运行导致 python 文件错误的代码片段,该问题仅发生在 IPython 中。