Django + SQLite 如何在发生“数据库被锁定”错误时增加 SQLite 超时

jon*_*alv 4 python sqlite django

我收到:django.db.utils.OperationalError: database table is locked错误(哦,男孩,那个问题有很多副本)所有答案都参考此页面:

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

虽然我明白发生了什么,但我显然不太了解 Python 和 Django,无法理解指令。指令是增加超时,如:

'OPTIONS': {
    # ...
    'timeout': 20,
    # ...
}
Run Code Online (Sandbox Code Playgroud)

但是对于一个小脑袋的熊来说,要准确理解代码的去向并不那么容易。有人可以给我更多的上下文吗?在我的 Django 项目中,我应该在哪里指定这些选项?它不可能是通用的 Django 设置,可以吗?超时听起来有点过于笼统的名称......

jon*_*alv 8

所以,是的,它在设置文件中,但不仅直接在设置文件中,而且在 DATABASES 下(当然)。

我的 DATABASES 部分现在看起来有点像这样:

   DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'OPTIONS': {
            'timeout': 20,  # in seconds
            # see also
            # https://docs.python.org/3.7/library/sqlite3.html#sqlite3.connect
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这似乎成功了。也许这对其他人来说是显而易见的,也可能不是。对于一个小脑袋熊来说,这并不总是那么容易。

  • 这对我来说看起来不太正确 - 我希望 `OPTIONS` 位于 `default` 字典中,而不是在它之后。 (2认同)
  • @VishnuYS 秒,https://docs.python.org/3.7/library/sqlite3.html#sqlite3.connect (2认同)