在第三方库中访问Pyramid数据库会话

时间:2014-03-27 14:28:21

标签: python sqlalchemy pyramid

我正在为Pyramid编写一个库。一个方面涉及为库提供模型类,然后从数据库中检索模型的所有实例。但是,如果没有访问会话工厂,我无法与数据库进行交互。

在Django中,这是在幕后处理的。金字塔与金字塔SQLAlchemy事实并非如此。

我是否有一种标准的方法可以在Pyramid中掌握当前线程的数据库会话,而不了解特定项目的设置方式(因为这是一个可重用的库)?

PS。我仍然围绕着这个SQLAlchemy领域,所以请原谅任何混乱。

2 个答案:

答案 0 :(得分:1)

你可以在继承的类中指定sqla session作为属性,就像factory-boy那样: https://factoryboy.readthedocs.org/en/latest/orms.html?highlight=sqlalchemy#sqlalchemy

另一种方法是创建接口,并且需要在应用程序注册表中注册sqlalchemy会话作为实用程序,然后在“config.include”您的扩展名之前。也许pyramid_jinja2会澄清这个解决方案。

答案 1 :(得分:1)

我建议阅读

将会话添加到请求对象的约定。您的库只是对此做出了假设,并将其写入您的包文档中。

全球与非全球会议

显示这些概念的官方教程

许多金字塔应用程序使用zope.sqlalchemy软件包来集成应用程序事务管理和数据库会话管理。甚至建议将此方法作为众多选项之一by SQLAlchemy docs。 zope.sqlalchemy的文档至少对我来说有点混乱。整个主题是使用SQLAlchemy从金字塔和线程本地会话开始的人们不断混淆的原因。

要查看使用这些软件包的全功能金字塔应用,请查看ToDoPyramid - one of the sample application listed on pyramid docs pages

cloned the project使数据库相关的代码至少对我来说更易测试和可读。我发现这些概念非常有效 - 如果正确设置了目标数据库的环境。