sqlalchemy 里的 session 具体有什么作用?

2014-11-20 14:51:25 +08:00
 p8p8
看了sqlalchemy的源码,看得糊里糊涂的,始终没搞懂sqlalchemy的session是派什么用场的,什么场景下最适合用,最应该用!望大小牛不啬赐教!
4522 次点击
所在节点    Python
8 条回复
wy315700
2014-11-20 15:00:24 +08:00
http://docs.sqlalchemy.org/en/rel_0_9/orm/session.html

看看官方教程吧,说的非常详细了
tini8
2014-11-20 15:08:54 +08:00
泼瓢冷水,用sqlalchemy还不如用原生sql。使用ORM工具就是为了方便,sqlalchemy繁琐到还不如原生sql方便了,学习成本很高。

django的orm在方便和复杂度之间平衡的很好。对于orm无法实现的查询,django官方的建议是使用原生sql。sqlalchemy的愿景是使用orm实现所有可能的sql查询,导致sqlalchemy极度臃肿。
skywalker
2014-11-20 16:44:05 +08:00
楼上用sqlalchemy也可以不用orm直接用core啊,这样就不用session了。
p8p8
2014-11-20 19:27:04 +08:00
我迟早要弃用它!
awanabe
2014-11-20 20:45:37 +08:00
简单来说就是连接池的抽象吧. 一个session保持一个connect. 保持session就可以减少重复连接数据库的消耗, 也可以避免创建过多连接而造成连接池爆掉.
session是不可以用于多线程的. 这个踩过坑
JoeShu
2014-11-21 00:31:28 +08:00
不明白什么情况下需要用sqlalchemy, 复杂而且又难用。原生的sql多简洁,而且PooledDB就可以解决连接池的问题啊。
hotea
2018-09-28 11:18:31 +08:00
是为了便于手动提交实现事物控制吧
hotea
2018-09-28 11:21:00 +08:00
参考一个 segmentfault 的回答: https://segmentfault.com/q/1010000000698181

在 SQLAlchemy 中一个 Session (可以看作)是一个 transaction,每个操作(基本上)对应一条或多条 SQL 语句,这些 SQL 语句需要发送到数据库服务器才能被真正执行,而整个 transaction 需要 commit 才能真正生效,如果没提交,一旦你的程序挂了,所有未提交的事务都会被回滚到事务开始之前的状态。
flush 就是把客户端尚未发送到数据库服务器的 SQL 语句发送过去,commit 就是告诉数据库服务器提交事务。
简单说,flush 之后你才能在这个 Session 中看到效果,而 commit 之后你才能从其它 Session 中看到效果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/148011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX