session.commit()和session.flush()有什么区别?

ash*_*aka 21 sqlalchemy

有谁知道什么之间的主要区别session.commit(),并session.flush()在SQLAlchemy的是什么?

NPE*_*NPE 16

以下是文档中的一些相关引用.

同花顺:

Session使用默认配置时,刷新步骤几乎总是透明地完成.具体来说,刷新发生在发出任何单个Query之前,以及在commit()提交事务之前的调用内 .

提交:

commit()用于提交当前事务.它总是 flush()事先发布以将任何剩余状态刷新到数据库 ; 这与"autoflush"设置无关.如果没有事务,则会引发错误.请注意,Session的默认行为是始终存在"事务"; 可以通过设置禁用此行为autocommit=True.在自动提交模式下,可以通过调用begin()方法启动事务.


Sin*_*ion 11

我知道如何解释这些操作的最简单方法是向您展示,使用echo=True:

>>> session.flush()
BEGIN (implicit)
INSERT INTO users (username, password) VALUES (?, ?)
('alice', None)
>>> session.commit()
COMMIT
>>> 
Run Code Online (Sandbox Code Playgroud)

flush()导致数据发送到数据库. commit()导致a COMMIT,它告诉数据库保留刚刚发送的数据.正如其他人所说,如果需要,commit()也会导致flush()发生.


Mat*_*all 5

直接来自文档

commit()用于提交当前事务。它总是flush()预先发出将所有剩余状态刷新到数据库的命令。