Python SQLAlchemy何时将记录提交到数据库?
我在工作中使用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
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
。所以我觉得这很奇怪。