我有一个与Getting fields history before flush
类似的问题这是我的代码:
user = User.query.filter(User.id == user_id).first()
print(user.first_name)
# Rick
user.first_name = 'Anders'
print(get_history(user, 'first_name'))
# History(added=[u'Anders'], unchanged=(), deleted=[u'Rick'])
db.session.flush()
print(get_history(user, 'first_name'))
# History(added=(), unchanged=[u'Anders'], deleted=())
因此,我可以在刷新之前轻松获得原始值。我可以使用get_history和' dirty'会话的属性。但是,当我执行session.flush()时,此方法会显示不正确的结果,并且“脏”'是空的。
但是,我可以在session.flush()之后使用session.rollback()回滚这些更改。 这就是为什么我认为可以获得原始价值的原因。他们只是隐藏在某个地方。
但是在哪里?
答案 0 :(得分:1)
session.flush()将所有挂起的对象创建,删除和对数据库的修改写为INSERT,DELETE,UPDATE等
因此,当您调用session.flush()
时,您添加会话(session.add(object)
)的对象将转到数据库,但它们不会永久写入,直到提交(session.commit()
)或回滚发生。
您的问题的答案:您的对象位于数据库中session.flush()