将mongoengine.connect从django中的setting.py中取出

时间:2016-02-15 09:39:15

标签: python django mongodb mongoengine

为了在Python / Django中使用Mongoengine连接到MongoDB,网上的大多数博客文章和示例都建议我们将这些行添加到应用程序的settings.py文件中:

from mongoengine import connect
connect('project1', host='localhost')

除了我最近遇到的情况之外,它适用于大多数情况: 当数据库关闭时!

假设db关闭,由于Supervisord引发的异常,正在处理Web服务器的过程(在我的情况下,connect)将停止运行应用程序。它可能会尝试几次,但在达到超时后,它将停止尝试。

因此,即使您的应用程序有一些与db无关的部分,它们也会崩溃。

快速解决方案是在连接代码中添加try / exception块:

try:
    connect('project1', host='localhost')
except Exception as e:
    print(e)

但我正在寻找一种更好,更干净的方法来处理这个问题。

1 个答案:

答案 0 :(得分:2)

不幸的是mongoengine实际上不可能这样做,除非你像你一样使用try-except解决方案。

您可以尝试使用pymongo连接纯MongoClient版本3.0+并在mongoengine.connection._connection_settings字典中手动注册连接(非常hacky但应该可以工作)。来自pymongo documentation

  

在3.0版中更改:MongoClient现在是独立服务器,mongos或副本集的唯一客户端类。它包括已分割为MongoReplicaSetClient的功能:它可以连接到副本集,发现其所有成员,并监视该组以进行降级,选举和重新配置。

     

MongoClient构造函数在连接到服务器时不再阻塞,如果它们不可用则不再引发ConnectionFailure,如果用户的凭据错误则不会引发ConfigurationError 。相反,构造函数立即返回并在后台线程上启动连接过程。