0
我有类似Getting fields history before flush如何在session.flush()之后在sqlalchemy中获取更改字段的原始值?
这里一个小问题是我的代码:
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()回滚这些更改。 这就是为什么我认为有可能获得原始值。他们只是躲在某个地方。
但是哪里?
但如何回滚获取对象的前一个状态数据库? 所以,我执行'session.flush()',我的更改进入数据库。 而且这两个状态的前一个和当前的都存储在那里。我理解正确吗? 但是,我可以在不执行回滚的情况下获得以前的状态吗? 像'user.get_history_after_flush()' – MrCyberthrone
我没有数据库服务器管理它,但是当你调用flush()更改到数据库。有一点需要注意;此更改仅适用于该会话。这意味着这些更改将不会通过另一个会话进行检索。如果你做了一个提交,那么你不能支持以前的值。 – metmirr