gpt4 book ai didi

python - 带有 SQLAlchemy 的 Pyramid : scoped or non-scoped database session

转载 作者:太空狗 更新时间:2023-10-29 22:25:09 25 4
gpt4 key购买 nike

对于旧版本的 Pyramid ,sqlalchemy session 的设置是使用类似于此的 scooped_session 完成的

DBSession = scoped_session(
sessionmaker(
autoflush=True,
expire_on_commit=False,
extension=zope.sqlalchemy.ZopeTransactionExtension()
)

但是我看到较新的教程以及 Pyramid docs在 DBSession 附加到请求对象的情况下,“提升”没有线程本地化的 sqlalchemy。

“旧”方式是否已被打破?无线程本地化的优势是什么?

最佳答案

在其他几位贡献者的帮助下,我率先进行了这一转变,他们在博客 [1] 中介绍了一些优势。它基本上归结为遵循 Pyramid 哲学,即可以编写不需要任何全局变量的应用程序。这在编写可重用、可组合的代码时非常重要。它使您的代码的依赖关系(api 表面)清晰,而不是让随机函数依赖于您的数据库,尽管它们的函数签名/成员变量没有暴露这些依赖关系。这也使得测试代码变得更容易,因为您不必担心线程局部变量。使用全局变量,您需要追踪哪些模块可能持有对它们的引用并修补它们以使用新对象。如果没有全局变量,您只需传入要使用的对象,代码就会使用它们,就像对象上的函数或状态的任何其他参数一样。

很多人提示必须将他们的数据库传递给大量函数。这是一种气味,只是意味着您没有很好地设计您的 api。很多时候,您可以将事物构造为一个对象,该对象根据请求创建一次,并将句柄存储为类似 self.dbsession 的对象,现在对象上的每个方法都可以访问它。

[1] https://metaclassical.com/testing-pyramid-apps-without-a-scoped-session/

关于python - 带有 SQLAlchemy 的 Pyramid : scoped or non-scoped database session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com