使用 Pyramid 连接到 MongoDb(或任何其他数据库服务器)
Connecting to MongoDb (or any other db server) with Pyramid
在models.py
模块中用下面两行连接到MongoDb服务器和在views.py
里面用import models.py
连接有什么区别:
from pymongo import MongoClient
db = MongoClient()['name']
与将 db
添加到 request
相比 here or here?
我刚开始玩 Pyramid 和 MongoDb,我使用了第一种方法并且效果很好。然后我发现人们使用第二种方法。
我是不是做错了什么?
您正在做的事情没有错,但如果您的应用程序变得复杂,它就不太适合未来了。您使用的模式有时称为 "using a module as a singleton"。第一次导入您的模块时,代码会运行,创建一个模块级对象,可以从从该模块导入的任何其他代码中使用。这没有任何问题,这是一个正常的 python 模式,这也是您在 python 领域看不到太多单例样板的原因。
但是,在复杂的应用程序中,准确控制某事发生的时间会变得很有用,而不管谁在何时导入了什么。当我们根据文档示例在配置时创建客户端时,您知道它是在配置(服务器启动)块为 运行 时创建的,而不是每当 any 代码时导入你的模块,从那时起你就知道它可以通过你的注册表使用,它可以通过请求对象在 Pyramid 应用程序中的任何地方访问。这是正常的 Pyramid 最佳实践:在服务器中设置所有跨请求机制的一次性共享启动代码,在其中创建配置器,并(可能)将它们附加到配置器或其注册表。
这与我们将事物挂钩到请求生命周期回调中的原因相同,它使我们能够知道某些每个请求代码的执行位置和时间,并确保清理助手始终在结束时触发请求生命周期。因此,对于数据库访问,我们在配置启动时创建共享机器,并在请求开始时创建每个连接代码,然后在请求结束时进行清理。对于 SQL 数据库,这意味着开始事务,然后在最后提交或回滚。
因此,现在,这对您的应用来说可能一点都不重要,但这是增加代码库的好习惯。大多数 Pyramid 设计决策都是针对复杂的代码情况做出的。
在models.py
模块中用下面两行连接到MongoDb服务器和在views.py
里面用import models.py
连接有什么区别:
from pymongo import MongoClient
db = MongoClient()['name']
与将 db
添加到 request
相比 here or here?
我刚开始玩 Pyramid 和 MongoDb,我使用了第一种方法并且效果很好。然后我发现人们使用第二种方法。
我是不是做错了什么?
您正在做的事情没有错,但如果您的应用程序变得复杂,它就不太适合未来了。您使用的模式有时称为 "using a module as a singleton"。第一次导入您的模块时,代码会运行,创建一个模块级对象,可以从从该模块导入的任何其他代码中使用。这没有任何问题,这是一个正常的 python 模式,这也是您在 python 领域看不到太多单例样板的原因。
但是,在复杂的应用程序中,准确控制某事发生的时间会变得很有用,而不管谁在何时导入了什么。当我们根据文档示例在配置时创建客户端时,您知道它是在配置(服务器启动)块为 运行 时创建的,而不是每当 any 代码时导入你的模块,从那时起你就知道它可以通过你的注册表使用,它可以通过请求对象在 Pyramid 应用程序中的任何地方访问。这是正常的 Pyramid 最佳实践:在服务器中设置所有跨请求机制的一次性共享启动代码,在其中创建配置器,并(可能)将它们附加到配置器或其注册表。
这与我们将事物挂钩到请求生命周期回调中的原因相同,它使我们能够知道某些每个请求代码的执行位置和时间,并确保清理助手始终在结束时触发请求生命周期。因此,对于数据库访问,我们在配置启动时创建共享机器,并在请求开始时创建每个连接代码,然后在请求结束时进行清理。对于 SQL 数据库,这意味着开始事务,然后在最后提交或回滚。
因此,现在,这对您的应用来说可能一点都不重要,但这是增加代码库的好习惯。大多数 Pyramid 设计决策都是针对复杂的代码情况做出的。