SQLAlchemy会话对象

SQLAlchemy会话对象,sqlalchemy,Sqlalchemy,我对SQLAlchemy中的会话对象感到困惑。它是否像PHP会话一样,其中会话是用户的所有事务,或者会话是确定事务生存期范围的实体 对于SQLAlchemy中的每个事务,其过程如下: -创建并打开会话 -执行交易 -提交或回滚 -闭门会议 因此,我的问题是,对于客户机,我们是创建一个会话对象,还是每当我们有一个事务要执行时就创建一个会话对象,我会犹豫是否将SQLAlchemy会话与PHP会话进行比较,因为通常PHP会话指代cookies,而SQLAlchemy与cookies或HTTP完全无关

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

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


因此,我的问题是,对于客户机,我们是创建一个会话对象,还是每当我们有一个事务要执行时就创建一个会话对象,我会犹豫是否将SQLAlchemy会话与PHP会话进行比较,因为通常PHP会话指代cookies,而SQLAlchemy与cookies或HTTP完全无关

如下所述:

会话通常在逻辑会话开始时构造 可能需要访问数据库的操作

每当会话用于与数据库对话时,它都会启动一个会话 数据库事务在开始通信时立即执行。假设 自动提交标志保留为其建议的默认值False,这 在回滚会话之前,事务仍在进行中, 承诺,或关闭。会话将开始一个新事务,如果 在上一笔交易结束后再次使用;从…起 因此,会话能够有一个生命周期 跨多个事务,但一次只能处理一个事务。我们指的是这些 事务范围和会话范围这两个概念

这意味着SQLAlchemy ORM正在鼓励 开发人员在其应用程序中建立这两个作用域, 不仅包括范围的开始和结束,还包括范围 例如,在这些作用域中,单个会话实例是否应该是本地的 对于函数或方法中的执行流,是否应该是 整个应用程序使用的全局对象,或介于两者之间的某个位置 这两个

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

对于何时使用会话,没有“一刀切”的解决方案。对于如何确定这一点,报告确实给出了一些提示