我正在为Pyramid编写一个库。一个方面涉及为库提供模型类,然后从数据库中检索模型的所有实例。但是,如果没有访问会话工厂,我无法与数据库进行交互。
在Django中,这是在幕后处理的。金字塔与金字塔SQLAlchemy事实并非如此。
我是否有一种标准的方法可以在Pyramid中掌握当前线程的数据库会话,而不了解特定项目的设置方式(因为这是一个可重用的库)?
PS。我仍然围绕着这个SQLAlchemy领域,所以请原谅任何混乱。
答案 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使数据库相关的代码至少对我来说更易测试和可读。我发现这些概念非常有效 - 如果正确设置了目标数据库的环境。