针对Pyramid请求的线程安全SQLAlchemy会话

时间:2015-06-05 14:44:43

标签: python sqlalchemy thread-safety pyramid

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

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)

这种方法的问题在于“事务管理器仍然作为此设计下的线程局提供”。知道怎么解决吗?谢谢!

1 个答案:

答案 0 :(得分:3)

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