【发布时间】:2017-04-30 08:38:51
【问题描述】:
SQLAlchemy 的官方教程提供了使用会话系统的示例,例如:
>>> from sqlalchemy.orm import sessionmaker
>>> Session = sessionmaker(bind=engine)
许多非官方教程也使用会话,但是有些根本不使用它们,而是选择了任何一种称为这种方法的方法:
e = create_engine('sqlite:///company.db')
conn = e.connect()
query = conn.execute("SELECT first_name FROM employee")
当这个简单得多的系统似乎在做同样的事情时,为什么还需要会话?据我所知,官方文档并没有明确说明为什么需要这样做。
SQLAlchemy 官方文档中有一个特别相关的部分:
Web 应用程序是最简单的情况,因为这样的应用程序已经围绕一个单一的、一致的范围构建——这就是请求,它表示来自浏览器的传入请求,处理该请求以形成响应,最后是将该响应返回给客户端。将 Web 应用程序与 Session 集成就是将 Session 的范围链接到请求的范围的简单任务。会话可以在请求开始时建立,也可以使用惰性初始化模式在需要时立即建立。然后请求继续进行,其中应用程序逻辑可以以与访问实际请求对象的方式相关联的方式访问当前会话的某个系统到位。当请求结束时,Session 也会被拆除,通常是通过使用 Web 框架提供的事件挂钩。 Session 使用的事务也可以在此时提交,或者应用程序可以选择显式提交模式,只提交那些有保证的请求,但仍然总是在最后无条件地拆除 Session。
...和...
一些网络框架包括基础设施来协助完成以下任务 使 Session 的生命周期与 Web 请求的生命周期保持一致。这个 包括 Flask-SQLAlchemy 等产品,可结合使用 使用 Flask Web 框架和 Zope-SQLAlchemy,通常与 金字塔框架。 SQLAlchemy 建议将这些产品 可用时使用。
不幸的是,我仍然不知道我是否需要使用会话,或者最后一段是否暗示某些实现(例如 Flask-SQLAlchemy)已经在自动管理会话。
我需要使用会话吗?不使用会话是否存在重大风险?我是否已经在使用会话,因为我正在使用 Flask-SQLAlchemy?
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy