sqlalchemy scoped_session

SQLAlchemy 的 scoped_session 提供了一种管理会话范围的方式,尤其适用于 web 应用程序。它使用线程局部存储,确保每个线程都有其独立的会话实例,从而在不同线程间隔离会话。scoped_session 可以被当作会话对象来使用,隐式地代理会话的方法。在 web 请求结束时,通常需要调用 scoped_session.remove() 来清理资源。对于多线程 web 应用,使用 scoped_session 可以简化会话管理,但最好还是利用 web 框架的集成工具来实现更精确的请求关联。
摘要由CSDN通过智能技术生成

Contextual/Thread-local Sessions

上下文、线程本地会话

回想一下我们在什么时候创建一个会话, 什么时候提交它, 什么时候关闭它? 引入了“”“会话范围” 的概念, 重点是web 应用程序将会和web请求相链接的实践。 大多数现代web 框架都包含集成工具, 因此可以自动管理会话的范围, 并且在可用的时候使用这些工具。

sqlalchemy 包含自己的助手对象, 这有助于建立用户自定义的会话范围。他还被第三方集成系统用于帮助构建他们的集成方案。

对象是scoedsession 对象, 它代表的会话对象的注册表。 如果你对注册别的模式不熟悉, 那么可以在企业架构的模式里面找到一个很好的解释。

注意:

scoped_session 对象是许多sqlalchemy 应用程序使用的非常流行和有用的对象。 然而, 中药的是要注意, 它只是提供了一种处理会话管理问题的方法。 如果你是sqlalchemy的新手, 特别是如果术语 “”“线程局部变量”, 在你看起来很奇怪, 那么我们建议你首先熟悉一个现成的集成框架系统, 例如 Flash-Sqlalchemy 或者zope.sqlalchemy 

一个scopedsession 是通过调用它来构造的, 它传递一个可以创建新的会话对象的工厂。工厂只是在被调用时产生新对象的东西, 在会话的情况下, 最长见的工厂是在北街前面介绍的sessionmaker.,下面来说明这个用法:

>>> from sqlalchemy.orm import scoped_session
>>> from sqlalchemy.orm import sessionmaker

>>> session_factory = sessionmaker(bind=some_engine)
>>> Session = scoped_session(session_factory)

我们创建的scoped_session 对象将在我们 “”“调用” 登记处时候调用sessionmaker

>>> some_session = Session()

在上面, 有些会话是会话的实例, 我们现在可以使用他来与数据库对话。 同样的会话也会存在于我们创建的scoped_session 注册表中, 如果我们第二次访问注册表, 我们会回到同一个会话;

>>> some_other_session = Session()
>>> some_session is some_other_session
True

这种模式 允许应用程序的不同部分调用全局的scoped_session, 这样所有的这些区域可以共享同一个会话, 而不是显示的进行传递, 我们在注册表中建立的会话会保留, 直到我们明确的告诉注册中心处理它,通过调用scoped_session.remov

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值