1
wy315700 2014-11-20 15:00:24 +08:00
|
2
tini8 2014-11-20 15:08:54 +08:00 1
泼瓢冷水,用sqlalchemy还不如用原生sql。使用ORM工具就是为了方便,sqlalchemy繁琐到还不如原生sql方便了,学习成本很高。
django的orm在方便和复杂度之间平衡的很好。对于orm无法实现的查询,django官方的建议是使用原生sql。sqlalchemy的愿景是使用orm实现所有可能的sql查询,导致sqlalchemy极度臃肿。 |
3
skywalker 2014-11-20 16:44:05 +08:00
楼上用sqlalchemy也可以不用orm直接用core啊,这样就不用session了。
|
4
p8p8 OP 我迟早要弃用它!
|
5
awanabe 2014-11-20 20:45:37 +08:00
简单来说就是连接池的抽象吧. 一个session保持一个connect. 保持session就可以减少重复连接数据库的消耗, 也可以避免创建过多连接而造成连接池爆掉.
session是不可以用于多线程的. 这个踩过坑 |
6
JoeShu 2014-11-21 00:31:28 +08:00
不明白什么情况下需要用sqlalchemy, 复杂而且又难用。原生的sql多简洁,而且PooledDB就可以解决连接池的问题啊。
|
7
hotea 2018-09-28 11:18:31 +08:00
是为了便于手动提交实现事物控制吧
|
8
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 中看到效果。 |