【问题标题】:SQLAlchemy Session ObjectSQLAlchemy 会话对象
【发布时间】:2013-10-08 06:44:26
【问题描述】:

我对 SQLAlchemy 中的会话对象感到困惑。它是像 PHP 会话一样,其中会话是用户的所有事务,还是会话是限定事务生命周期的实体。

对于 SQLAlchemy 中的每个事务,过程如下: - 创建和打开会话 - 执行交易 -提交或回滚 -关闭会话

所以,我的问题是,对于客户,我们是创建单个会话对象,还是在我们有事务要执行时创建会话对象

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    我会犹豫将 SQLAlchemy 会话与 PHP 会话进行比较,因为通常 PHP 会话指的是 cookie,而 SQLAlchemy 与 cookie 或 HTTP 根本无关。

    正如the documentation所解释的:

    会话通常在逻辑的开头构造 可能预期数据库访问的操作。

    会话,无论何时用于与数据库对话,都会开始一个 数据库事务一旦开始通信。假设 自动提交标志保留其推荐的默认值 False,这 事务一直在进行,直到 Session 回滚, 承诺或关闭。 Session 将开始一个新的事务,如果它 在上一个事务结束之后再次使用;从 因此,会话能够有一个生命周期 跨越许多事务,尽管一次只有一个。我们参考这些 事务范围和会话范围两个概念。

    这里的含义是 SQLAlchemy ORM 鼓励 开发人员在他或她的应用程序中建立这两个范围, 不仅包括范围开始和结束的时间,还包括范围 在这些范围中,例如单个 Session 实例是否应该是本地的 到函数或方法中的执行流程,它应该是 整个应用程序使用的全局对象,或介于两者之间的某个位置 这两个。

    如您所见,完全由应用程序的开发人员决定如何使用会话。在一个简单的桌面应用程序中,创建单个全局会话对象并继续使用该会话对象并在用户点击“保存”时提交可能是有意义的。在 Web 应用程序中,经常使用“处理每个请求的会话”策略。有时您会在同一个应用程序中使用这两种策略(针对 Web 请求的每个请求的会话,但针对后台任务的属性略有不同的单个会话)。

    对于何时使用会话没有“一刀切”的解决方案。 documentation 确实提供了有关如何确定这一点的提示。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 2014-02-06
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多