我遵循了MongoDB and Pyramid的Pyramid Cookbook说明,但这似乎将数据库查询链接到request.db
,我只能从我的观点中获取。 如何打开可以从类方法中调用的连接?
我正在尝试为项目中的对象设置一个真正的准系统序列化程序。我在resources/
文件夹中有许多类定义来处理我的项目数据。我想给每个对象提供自包含的.save()
和.find()
方法(类似于mongoengine
),它们将对象的数据转换为字典并使用字典将该字典保存到MongoDB中pymongo
。
使用pymongo
打开与MongoDB的连接很容易。您所要做的就是使用MongoClient
。问题是每次实例化对象或调用类时我都不想打开新连接。我希望在egg的main()
函数中建立一个连接,然后我可以在需要时访问它(就像在视图中request.db
一样)。
显然我对金字塔来说是全新的,所以任何帮助都会受到赞赏。提前谢谢。
答案 0 :(得分:0)
我会创建一个模块来初始化并保存资源/包中的MongDB连接。
E.g。资源/ connection.py
import pymongo
db = None
def initialize(settings):
global db
db = MongoClient(settings['mongo_uri'])
然后在您的应用主要功能中:
from myapp.resources import connection
def main(global_config, **settings):
# ...
connection.initialize(settings)
# ...
config.add_request_method(lambda request: connection.client, 'db', reify=True)
在任何其他模块(不是视图)中,只需导入连接模块:
from myapp.resources import connection
connection.db.posts
恕我直言,这种方法比食谱中描述的方法更具可扩展性和单元可测试性。