【问题标题】:Accessing Pyramid DB Session within third-party library在第三方库中访问 Pyramid DB Session
【发布时间】:2014-04-01 18:34:17
【问题描述】:

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

在 Django 中,这是在幕后处理的。对于 Pyramid 和 SQLAlchemy,情况并非如此。

我是否有一种标准方法可以在 Pyramid 中获取当前线程的 DB Session,并且不知道如何设置特定项目(因为这是一个可重用的库)?

PS。我仍然对 SQLAlchemy 的这个领域有所了解,所以请原谅任何困惑。

【问题讨论】:

    标签: python sqlalchemy pyramid


    【解决方案1】:

    您可以将 sqla 会话指定为继承类中的属性,就像 factory-boy 所做的那样: https://factoryboy.readthedocs.org/en/latest/orms.html?highlight=sqlalchemy#sqlalchemy

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

    【讨论】:

    【解决方案2】:

    我建议阅读有关

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

    全局与非全局会话

    展示这些概念的官方教程

    许多金字塔应用程序使用包 zope.sqlalchemy 来集成应用程序事务管理和数据库会话管理。这种方法甚至被推荐为by SQLAlchemy docs 的众多选项之一。 zope.sqlalchemy 的文档至少对我来说有点令人困惑。对于从金字塔和线程本地会话开始使用 SQLAlchemy 的人来说,这个主题一直是一个困惑的根源。

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 2010-10-02
      • 1970-01-01
      • 2011-09-18
      • 2020-03-31
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多