Django + Sqlite: 数据库被锁定

3

在电力故障后,我的网络数据库出现了问题。

我运行程序打开登录页面,但是用户名和密码不再被识别。

我收到了错误提示。

Exception Type: DatabaseError
Value Exception: database is locked

而我的功能是:
def main_page(request):
    state = ""
    username = password = ''
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)

这个问题出现在这一行:user = .... 我该如何解决?

这不是Django的问题,而是Sqlite的问题。请参考这个问题 - Taylan Aydinli
对我来说,问题出在NFS上,我在这里找到了解决方案:https://dev59.com/qXVC5IYBdhLWcg3w51hv#6366752 - Sona Pochybova
1个回答

9

来自 Django 文档:

SQLite 旨在成为一款轻型数据库,因此无法支持高并发。OperationalError: database is locked 错误表示你的应用程序承载了比 SQLite 默认配置所能处理的并发量更多。这个错误意味着一个线程或进程独占了数据库连接,而另一个线程则超时等待锁释放。

Python 的 SQLite 包有一个默认的超时值,用于确定第二个线程在等待锁的时间限制,如果超时,则会抛出 OperationalError: database is locked 错误。

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

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

3
我只有一个问题。您能告诉我为什么,在这次电力故障之前,它使用sqlite完美地工作了吗? - Patrice
也许这个问题会回答你的问题,就像上面@vape建议的那样。链接 - Seyeong Jeong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接