SQLAlchemy会话对象

时间:2013-10-08 06:44:27

标签: sqlalchemy

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

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

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

1 个答案:

答案 0 :(得分:3)

我会犹豫是否将SQLAlchemy会话与PHP会话进行比较,因为通常PHP会话引用cookie,而SQLAlchemy根本不涉及cookie或HTTP。

正如the documentation所述:

  

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

     

会话,无论何时用于与数据库通信,都会开始   数据库事务一开始通信。假设   autocommit标志保留其建议的默认值False,这个   在会话回滚之前,事务仍在进行中,   承诺或关闭。如果会话,会话将开始新的交易   在前一个交易结束之后再次使用;从   因此,会话能够延长寿命   跨越许多交易,虽然一次只有一个。我们指的是这些   作为事务范围和会话范围的两个概念。

     

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

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

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