我在为金字塔写一个图书馆。一个方面涉及向库提供一个模型类,然后从数据库中检索模型的所有实例。但是,如果没有对会话工厂的访问,我就无法与DB交互。
在Django,这是幕后处理的。对于金字塔和SQLAlchemy,情况并非如此。
对于我来说,是否有一种标准的方法可以在金字塔中获得当前线程的DB会话,而不知道如何设置一个特定的项目(因为这是一个可重用的库)?
PS。我仍在SQLAlchemy的这一地区工作,所以请原谅我的困惑。
发布于 2014-03-28 08:05:06
您可以在继承的类中指定sqla会话为属性,就像工厂男孩做的那样:https://factoryboy.readthedocs.org/en/latest/orms.html?highlight=sqlalchemy#sqlalchemy
另一种方法是在"config.include“扩展之前创建接口,并要求在应用程序注册表中注册sqlalchemy会话为实用程序。也许jinja2会澄清这个解决方案。
发布于 2014-04-01 10:09:43
我建议你读一下
向请求对象添加会话的约定。您的库只是对此进行了假设,并将其写入包文档中。
全局会话与非全局会话
一个正式的教程展示了这些概念
许多金字塔应用程序使用包zope.sqlalchemy集成应用程序事务管理和DB会话管理。这种方法甚至被推荐为许多选项之一,由SQLAlchemy文档编写。zope.sqlalchemy的文档有些混乱,至少对我来说是这样。对于使用SQLAlchemy的金字塔和线程本地会话,整个主题始终是人们困惑的根源。
若要查看使用这些包的功能齐全的金字塔应用程序,请参阅ToDoPyramid -金字塔文档页面中列出的示例应用程序之一。
我克隆项目使数据库相关的代码至少对我来说更易于测试和可读性。我发现这些概念工作得很好--如果正确设置数据库的环境的话。
https://stackoverflow.com/questions/22690609
复制相似问题