如何在django中设置数据库连接的超时时间

时间:2009-07-05 17:38:11

标签: django

我有mysql数据库作为django的引擎。 Django通过fastcgi认为nginx在1分钟内超时(之后nginx说“504网关超时”)。

如果数据库出现故障,django正在尝试重新连接到DB并等待来自它的响应。等待响应时间太长(超过1分钟),nginx返回客户端504错误代码。

如何在django中设置db connecton的超时时间?以及正确的方式处理此事件并返回客户端一个漂亮的页面“抱歉数据库现在停止服务。请稍后再试”而不是技术504错误页面?

2 个答案:

答案 0 :(得分:16)

您可以使用DATABASES设置的OPTIONS词典。

选项名称取决于您的数据库后端,但对于PostgreSQL,它将是connect_timeout

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        …
        'OPTIONS': {
            'connect_timeout': 5,
        }
    }
}

答案 1 :(得分:5)

DATABASE_OPTIONS中的

settings.py是额外关键字args的字典,传递给正在使用的数据库模块的connect方法;根据{{​​1}}上的connect个文档,connect_timeout值,正如另一个答案所说的那样,确实是你想要的(之前我曾经错过了,并且它因后端而异 - 例如,如果您的后端是SQLite,则拼写为timeout

对于自定义错误页面,您可以按照MySqlDB中关于编写自己的异常中间件的建议(我确定简单的异常中间件,只显示自定义页面可以在贡献的软件中找到,但它可能滚动自己比在网上搜索现有代码更快,你可能不得不调整代码; - )。