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