OperationalError:数据库被锁定

新手上路,请多包涵

我在我的应用程序中做了一些重复操作(测试它),突然我得到一个奇怪的错误:

 OperationalError: database is locked

我已经重新启动服务器,但错误仍然存在。这到底是怎么回事?

原文由 dana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

来自 django 文档:

SQLite 是一个轻量级的数据库,因此不能支持高级别的并发。 OperationalError: database is locked 错误表明您的应用程序正在经历比 sqlite 在默认配置下可以处理的更多的并发性。此错误意味着一个线程或进程在数据库连接上具有独占锁,而另一个线程在等待释放锁时超时。

Python 的 SQLite 包装器有一个默认的超时值,它决定了第二个线程在超时并引发 OperationalError: database is locked 错误之前允许等待锁的时间。

如果您遇到此错误,可以通过以下方式解决:

  • 切换到另一个数据库后端。在某个时刻,SQLite 对于现实世界的应用程序来说变得太“精简”了,而这些并发错误表明您已经达到了那个时刻。
  • 重写您的代码以减少并发性并确保数据库事务是短暂的。
  • 通过设置超时数据库选项增加默认超时值

http://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption

原文由 patrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

就我而言,这是因为我从 SQLite 浏览器打开了数据库。当我从浏览器关闭它时,问题就消失了。

原文由 Aminah Nuraini 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题