2013-10-08 95 views
1

我对SQLAlchemy中的会话对象感到困惑。它是否像PHP会话一样,会话是用户的所有事务,或者是一个会话,它是一个范围是事务生命周期的实体。SQLAlchemy会话对象

对于SQLAlchemy的每一笔交易,是过程如下: - 创建和公开会议 -perform交易 -commit或回滚 -close会议

所以,我的问题是,对于一个客户,做我们创建一个会话对象,或者每当我们有一个事务执行时创建一个会话对象

回答

3

因为通常PHP会话引用cookie,所以我会犹豫是否要将SQLAlchemy会话与PHP会话进行比较,而SQLAlchemy有与cookies或HTTP完全无关。

正如the documentation解释:

会话是在逻辑 操作,其中数据库的访问是可能的预期的开始通常被构造。

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

这里的含义是,SQLAlchemy的ORM正在鼓励 开发者在他或她的申请,以建立这两个领域, 不仅包括在范围开始和结束,也延展的范围的 ,例如如果单个Session实例是本地的 到一个函数或方法内的执行流程,它应该是整个应用程序使用的一个 全局对象,还是这两者之间的某个地方的 。

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

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