我需要使用SQLAlchemy会话吗?

礼顿F.

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的范围与请求的范围链接起来的直接任务。可以在请求开始时建立会话,也可以使用惰性初始化模式来建立会话,该初始化模式会在需要时立即建立会话。然后,请求继续进行,并且某个系统就位,其中应用程序逻辑可以按照与访问实际请求对象的方式关联的方式访问当前会话。随着请求的结束,会话也被拆除,通常通过使用Web框架提供的事件挂钩来实现。Session所使用的事务也可以在此时进行提交,或者应用程序可以选择显式的提交模式,仅针对那些有保证的请求进行提交,但始终始终无条件地终止Session。

...和...

一些Web框架包括一些基础结构,以帮助完成使Session的寿命与Web请求的寿命保持一致的任务。这包括与Flask Web框架结合使用的产品,例如Flask-SQLAlchemy和通常与Pyramid框架一起使用的Zope-SQLAlchemy。SQLAlchemy建议使用这些产品。

不幸的是,我仍然无法确定我是否需要使用会话,或者最后一段是否暗示着某些实现(例如Flask-SQLAlchemy)已经在自动管理会话。

我需要使用会议吗?不使用会话是否存在重大风险?因为使用Flask-SQLAlchemy,我已经在使用会话了吗?

亚当·伯特克

如您所指出的,如果仅使用纯SQLAlchemy Core构造和执行查询,则会话并不是严格必需的但是,它们提供了利用SQLAlchemy ORM所需的更高的抽象层会话维护修改后的模型的图形,并确保在必要时将更改有效且一致地刷新到数据库。

由于您已经使用过Flask-SQLAlchemy,因此即使您不需要ORM功能,我也看不到避免会话的理由。该扩展程序处理隔离请求所需的所有管道,因此您不必重新设计轮子,而是可以专注于应用程序代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我真的需要使用PuTTY从Linux的SSH会话中“退出”吗?

来自分类Dev

我需要使用定义吗?

来自分类Dev

我需要使用模拟吗?

来自分类Dev

我需要使用 IDisposable 吗?

来自分类Dev

需要使用会话状态

来自分类Dev

我需要使用https进行Facebook登录吗?

来自分类Java

我们到底需要使用类型转换吗?

来自分类Dev

我需要使用旧 API 组吗?

来自分类Dev

GWT的@JsType-我需要使用它吗?

来自分类Dev

我需要使用Opcache进行memcached吗?

来自分类Dev

我还需要使用虚拟内存吗?

来自分类Dev

我需要使用变量,在外部循环吗?

来自分类Dev

我需要使用Protobuf存储长度信息吗?

来自分类Dev

我真的需要使用管道结构而不是`of`吗?

来自分类Dev

我需要使用线程吗?GUI +简单的网页抓取

来自分类Dev

我需要使用活动堆叠吗?

来自分类Dev

为什么我需要使用Spring OAuth2 JbdcTokenStore进行粘性会话?

来自分类Dev

我需要使用spring将我的https URL重定向为小写吗?

来自分类Dev

我需要使用线程类捕获自我吗?

来自分类Linux

GCC 4.7.2需要使用ppl吗?

来自分类Dev

需要使用shared_ptr吗?

来自分类Dev

捕捉需要使用systemd吗?

来自分类Dev

使用 Kubernetes 时,我还需要使用 Containers for Oracle 吗?

来自分类Dev

在switch / case中使用return之后,我还需要使用break吗?

来自分类Dev

使用dnsmasq设置srv记录-我需要使用FQDN吗?

来自分类Dev

我们需要使用Annotation进行XML配置的xml文件吗?

来自分类Dev

我需要使用AdMob手动刷新横幅广告吗?

来自分类Dev

春季:我需要使用@EnableAspectJAutoProxy进行编译时编织吗?

来自分类Dev

Kubernetes-我需要使用https进行Pod内部的容器通信吗?

Related 相关文章

热门标签

归档