【问题标题】:"OperationalError: database is locked" when deploying site to Azure将站点部署到 Azure 时出现“OperationalError:数据库已锁定”
【发布时间】:2019-10-29 04:17:33
【问题描述】:

我已经建立了一个 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 个视图:主页、上下文初始化、登录和回调)。而已。

顺便提一下,当我在本地运行该站点时,一切正常。它仅在部署后停止工作。
另一个奇怪的事情是,我之前曾在 azure 上将类似的内容上传到另一个站点,并且登录成功。由于某种原因,它现在不起作用,我不知道为什么......
有没有人遇到过这种类型的错误并可以提供帮助?

如果您需要我提供更多文件的内容,请告诉我哪些文件,我会提供。

【问题讨论】:

    标签: python django sqlite azure-web-app-service


    【解决方案1】:

    这似乎是这个问题的重复:OperationalError: database is locked

    来自 Django 的文档: https://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption

    SQLite 是一个轻量级数据库,因此不能支持 高并发。 OperationalError:数据库被锁定错误 表明您的应用程序正在经历比 sqlite 可以在默认配置中处理。这个错误意味着一个 线程或进程对数据库连接具有排他锁,并且 另一个线程在等待释放锁时超时。

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

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

    切换到另一个数据库后端。在某个时候 SQLite 对于现实世界的应用来说变得太“精简”了,而这些 并发错误表明您已达到该点。

    重写代码以减少并发并确保数据库 交易是短暂的。

    通过设置超时数据库来增加默认超时值 选项

    我也一直在开发 Django Web 应用程序,我选择了 Azure SQL Server 作为应用程序的数据库。一切正常。

    【讨论】:

    • 谢谢!我已将其更改为 Azure SQL,并且可以正常工作。如果其他人也这样做,请记住在 settings.py 中输入 'driver': 'ODBC Driver 17 for SQL Server' 而不是像微软在连接字符串中所说的 'driver': 'ODBC Driver 13 for SQL Server'
    • @baby_bunny_x3 你做得怎么样。我也面临同样的问题
    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多