Python 用于金字塔请求的线程安全SQLAlchemy会话
文章演示了一种将SQLAlchemy DB会话通过以下方式附加到每个请求的好方法:Python 用于金字塔请求的线程安全SQLAlchemy会话,python,sqlalchemy,thread-safety,pyramid,Python,Sqlalchemy,Thread Safety,Pyramid,文章演示了一种将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_m
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)
这种方法的问题在于“在这种设计下,事务管理器仍然作为threadlocal提供”。知道怎么修吗?谢谢
得益于
pyramid_tm
包中的一些改进,您实际上可以完全删除threadlocal事务管理器。这是否是一个好主意取决于您。这不仅仅是交易管理;这里还有会话上的线程本地约束。你看过了吗?谢谢!正如我所期待的,您能否详细说明“这是否是一个好主意取决于您”是否存在不希望避免线程局部变量的情况?可能有某些包希望线程局部变量可用,因为它是与事务
包交互的默认方法(用于协调提交的zope.sqlalchemy
、pyramid_tm
等的底层包)。