Django:如何在启动时禁用数据库状态检查?

Django: How to disable Database status check at startup?

提问人:Israel Fonseca 提问时间:7/21/2017 更新时间:8/11/2017 访问量:3851

问:

据我所知,如果 Django 应用程序中设置的任何数据库在应用程序启动时关闭,则无法启动。有没有办法让 Django “延迟加载”初始数据库连接?settings.py

我配置了两个数据库,其中一个有点不稳定,有时它可能会关闭几秒钟,但它仅用于应用程序的某些特定用例。可以想象,我不希望因此而无法启动所有应用程序。有什么解决办法吗?

我使用的是 Django 1.6.11,我们也使用 Django South 进行数据库迁移(以防它以某种方式相关)。

python mysql django django-models django-south

评论

4赞 Alasdair 7/21/2017
我想你错了。当你启动时,Django 不一定会访问数据库。模块中可能有代码在加载模块时(而不是在视图运行时)导致数据库查询。./manage.py runserver
0赞 JL Peyret 7/26/2017
确定吗?怎么办?它是否不检查模型,这是否意味着数据库已启动?事实上,引用 docs.djangoproject.com/en/1.11/topics/checks字段、模型、模型管理器和数据库后端都实现了 check() 方法Performing system checks...
0赞 John Moutafis 8/11/2017
我想知道你是否觉得我的答案有帮助

答:

4赞 John Moutafis 7/21/2017 #1

我不知道它有多安全,但您可以执行以下操作:

  1. 在以空开头:settings.pyDATABASES

    DATABASES = {}
    
  2. 在 中,利用钩子建立数据库连接:apps.pyready()

    from settings.py import DATABASES
    
    class YourAppConfig(AppConfig):
    
        def ready(self):
            DATABASES.update({
                Your database connections
            })
    

现在我不能把我的手放在火上,但 Django 会在需要时尝试重新初始化数据库连接

2赞 Israel Fonseca 8/11/2017 #2

我做了更多的测试,问题仅在您使用 de 开发服务器 。在这种情况下,它会强制与数据库建立连接。python manage.py runserver

使用实际的WSGI服务器,它不会像@Alasdair告知的那样发生。

@JohnMoutafis最后我没有测试你的解决方案,但这可能有效。