我在应用程序启动之前创建一个连接实例
# app.py
mongodb_conn = pymongo.Connection(host=host, port=int(port), safe=True)
print(mongodb_conn) # Connection('127.0.0.1', 27017)
...
bottle.run(...)
但是,在我的请求中,当我尝试从其他模块访问此连接时,它错误地说mongodb_conn
是None
# user.py
from app import mongodb_conn
...
db = mongodb_conn['somedb'] # TypeError: 'NoneType' object is not subscriptable
有人可以解释发生了什么吗?
答案 0 :(得分:1)
好的,我已经能够解决问题了。这与模块加载订单中的一些差异有关。
但是,缓存一个连接实例然后在应用程序的整个生命周期中使用它是完全正常的。即使对于线程应用程序也是如此。
答案 1 :(得分:1)
我知道你在答案中已经提到你因为模块订单问题而解决了这个问题,但我希望包含一个扩展答案。
在没有看到更多代码的情况下,我假设您正在设置一些循环导入,其中连接在app.py中定义,这可能也会导入您的user.py,但随后您的user.py导入应用。 py用于连接对象。 mongodb_conn
很可能在那时没有关联。
我建议你创建一个名为db.py的第3个模块。在那里创建一个全局变量连接,或者,创建一个总是返回相同连接的简单单例类,或者一个总是返回全局连接的简单函数,如getConnection()
。这样,您就不会有循环导入,任何其他模块都可以导入db