我建立了一个django网站,其中一部分是Microsoft身份验证链接。
当我将网站上传到蔚蓝云并单击“登录”链接时,收到以下错误:
OperationalError at /login
database is locked
Request Method: GET
Request URL: http://bhkshield.azurewebsites.net/login
Django Version: 2.2.2
Exception Type: OperationalError
Exception Value:
database is locked
Exception Location: /home/site/wwwroot/antenv3.6/lib/python3.6/site-packages/django/db/backends/base/base.py in _commit, line 240
Python Executable: /usr/local/bin/python
Python Version: 3.6.7
Python Path:
['/usr/local/bin',
'/home/site/wwwroot',
'/home/site/wwwroot/antenv3.6/lib/python3.6/site-packages',
'/usr/local/lib/python36.zip',
'/usr/local/lib/python3.6',
'/usr/local/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/site-packages']
Server time: Fri, 14 Jun 2019 13:19:22 +0000
我正在使用sqlite3(setting.py代码段):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
我不明白为什么会收到此错误,因为我没有向数据库中插入或提交任何内容。
我的网站仅包含一个具有登录链接的页面(4个视图:主页,contex初始化,登录和回调)。而已。
只需提一下,当我在本地运行站点时,一切正常。它仅在部署后停止工作。
另一个奇怪的事情是,我之前曾将这样的内容上传到azure上的另一个网站,并且登录正常。由于某种原因,它现在不起作用,我也不知道为什么...
有没有人遇到这种类型的错误并且可以提供帮助?
如果您需要我提供更多文件的内容,请告诉我,我会的。
答案 0 :(得分:0)
似乎是这个问题的重复:OperationalError: database is locked。
从Django文档中: https://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption
SQLite旨在成为轻量级数据库,因此不支持 高并发性。 OperationalError:数据库被锁定错误 指示您的应用程序比 sqlite可以处理默认配置。此错误表示 线程或进程对数据库连接具有排他锁,并且 另一个线程超时,等待释放锁。
Python的SQLite包装器具有默认的超时值,该值确定 第二个线程被允许在锁上等待多长时间 超时并引发OperationalError:数据库被锁定错误。
如果遇到此错误,可以通过以下方法解决:
切换到另一个数据库后端。在某个时候SQLite 变得对于实际应用程序太“精简”,而这些种类的 并发错误表明您已经达到目标。
重写代码以减少并发性并确保数据库 交易是短暂的。
通过设置超时数据库来增加默认超时值 选项
我也一直在开发Django Web应用程序,我选择了Azure SQL Server作为应用程序的数据库。一切正常。