如何在session.flush()之后获取sqlalchemy中已更改字段的原始值?

时间:2017-02-23 09:20:26

标签: python sqlalchemy flush

我有一个与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()回滚这些更改。 这就是为什么我认为可以获得原始价值的原因。他们只是隐藏在某个地方。

但是在哪里?

1 个答案:

答案 0 :(得分:1)

  

session.flush()将所有挂起的对象创建,删除和对数据库的修改写为INSERT,DELETE,UPDATE等

因此,当您调用session.flush()时,您添加会话(session.add(object))的对象将转到数据库,但它们不会永久写入,直到提交(session.commit())或回滚发生。

您的问题的答案:您的对象位于数据库中session.flush()