【问题标题】:Thread safe SQLAlchemy session for Pyramid requestsPyramid 请求的线程安全 SQLAlchemy 会话
【发布时间】:2015-06-06 13:14:32
【问题描述】:

文章 What the Zope Transaction Manager Means To Me (and you) 演示了一种以这种方式将 SQLAlchemy DB 会话附加到每个请求的好方法:

def includeme(config):
    settings = config.get_settings()
    engine = engine_from_config(settings)

    maker = sessionmaker()
    register(maker)
    maker.configure(bind=engine)

    config.add_request_method(lambda request: maker(), 'db_session', reify=True)

这种方法的问题是“在这种设计下,事务管理器仍然作为线程本地提供”。知道如何解决吗?谢谢!

【问题讨论】:

标签: python sqlalchemy thread-safety pyramid


【解决方案1】:

https://gist.github.com/mmerickel/84b34ee5d68ed20dae10#file-model-py-L16-L19 由于pyramid_tm 包中的一些改进,您实际上可以完全删除线程本地事务管理器。这是否是一个好主意取决于您。

【讨论】:

  • 谢谢!正是我想要的
  • 您能否详细说明“这是否是一个好主意取决于您” 在任何情况下都不想避免线程本地化?
  • 可能有某些包期望 threadlocals 可用,因为它是与 transaction 包(zope.sqlalchemypyramid_tm 等使用的底层包)交互的默认方法协调提交)。
猜你喜欢
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2011-12-17
  • 2012-07-06
  • 2011-10-14
相关资源
最近更新 更多