如何在Pyramid中的视图外部访问MongoDB连接?

时间:2015-02-07 02:26:28

标签: mongodb pymongo pyramid

我遵循了MongoDB and Pyramid的Pyramid Cookbook说明,但这似乎将数据库查询链接到request.db,我只能从我的观点中获取。 如何打开可以从类方法中调用的连接?

我正在尝试为项目中的对象设置一个真正的准系统序列化程序。我在resources/文件夹中有许多类定义来处理我的项目数据。我想给每个对象提供自包含的.save().find()方法(类似于mongoengine),它们将对象的数据转换为字典并使用字典将该字典保存到MongoDB中pymongo

使用pymongo打开与MongoDB的连接很容易。您所要做的就是使用MongoClient。问题是每次实例化对象或调用类时我都不想打开新连接。我希望在egg的main()函数中建立一个连接,然后我可以在需要时访问它(就像在视图中request.db一样)。

显然我对金字塔来说是全新的,所以任何帮助都会受到赞赏。提前谢谢。

1 个答案:

答案 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
恕我直言,这种方法比食谱中描述的方法更具可扩展性和单元可测试性。