1

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

对于 SQLAlchemy 中的每个事务,过程如下: -create and open session -perform transaction -commit or rollback -close session

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

4

1 回答 1

3

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

正如文档所解释的

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

Session,只要它被用来与数据库对话,它就会在它开始通信时立即开始一个数据库事务。假设自动提交标志保留其推荐的默认值 False,则此事务将一直进行,直到 Session 回滚、提交或关闭。如果再次使用 Session 将在前一个事务结束之后开始一个新事务;由此可以得出结论,会话能够在许多事务中具有生命周期,尽管一次只有一个。我们将这两个概念称为事务范围和会话范围。

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

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

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

于 2013-10-08T07:07:09.980 回答