有人知道SQLAlchemy中的session.commit()
和session.flush()
的主要区别是什么吗?
发布于 2011-09-20 00:15:36
我所知道的解释这些功能的最简单方法是使用echo=True
向您展示
>>> session.flush()
BEGIN (implicit)
INSERT INTO users (username, password) VALUES (?, ?)
('alice', None)
>>> session.commit()
COMMIT
>>>
flush()
使数据被发送到数据库。commit()
产生一个COMMIT
,它告诉数据库保留刚刚发送的数据。正如其他人所说,如果需要的话,commit()
也会导致flush()
的发生。
发布于 2017-02-10 17:12:57
尽管上面的答案是正确的,但是flush最有用的功能是将对数据库中的表所做的更改应用回代码中的相关对象。下面是一个示例,假设您注册了一个用户,并希望返回其id,
u = User(name,address,phone) #id is autogenerated
session.add(u)
session.commit() #calls flush beforehand, but we need it after the commit
session.flush() #updates the objects of the session
print(u.id) #id field of the User object updated after the flush
您无需再次查询即可获得他的id!!希望这能有所帮助
https://stackoverflow.com/questions/7471495
复制相似问题