一尘不染

OperationalError:数据库已锁定

django

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

OperationalError: database is locked

我已经重新启动服务器,但是错误仍然存​​在。可能是什么呢?


阅读 490

收藏
2020-03-27

共1个答案

一尘不染

从Django文档中:

SQLite是一个轻量级的数据库,因此不支持高级别的并发性。OperationalError:数据库已锁定错误,表明你的应用程序并发性超过sqlite在默认配置下无法处理的并发性。此错误意味着一个线程或进程在数据库连接上具有排他锁,而另一个线程超时,等待释放该锁。

Python的SQLite包装器具有默认的超时值,该值确定第二个线程在超时之前允许等待锁多长时间,并引发OperationalError:数据库被锁定错误。

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

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