Python SQLAlchemy何时将记录提交到数据库?

Python SQLAlchemy何时将记录提交到数据库?,python,session,sqlalchemy,Python,Session,Sqlalchemy,我在工作中使用SQLAlchemy,代码如下: with session.begin(subtransactions=True): order = Order(**data) session.add(order) session.close() 执行代码时,MySQL中没有任何新记录。如果我将代码更改为: with session.begin(subtransactions=True): order = Order(**data) session.add(or

我在工作中使用SQLAlchemy,代码如下:

with session.begin(subtransactions=True):
    order = Order(**data)
    session.add(order)

session.close()
执行代码时,MySQL中没有任何新记录。如果我将代码更改为:

with session.begin(subtransactions=True):
    order = Order(**data)
    session.add(order)

session.commit()
session.close()
将插入一条新记录

我认为记录是由SQLAlchemy缓存的,但为什么我关闭会话,而会话不会将所有数据刷新到数据库中呢


我想知道是否应该显式地
session.commit()
,即使我在
session.begin()中使用
with
语句。因为我阅读了SQLAlchemy,发现如果我使用
with
语句,如果没有异常出现,它应该提交我的所有数据,如果有异常出现,它应该回滚。

SQLAlchemy明智地“面对歧义,拒绝猜测的诱惑”(
在Python交互式解释器中导入此
并思考“Python之禅”!-)--它怎么能猜出你是要提交还是要回滚?!“显式优于隐式”(同样,Python禅宗中的一个关键koan):显式,减少未来的“oops”和遗憾@AlexMartelli但是我认为
with
语句和
session.begin()
是一个语法糖,就像
try…except
一样,它的实现实际上是一个
try…except
。所以我觉得这很奇怪。