私はここでGetting fields history before flushsession.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()を実行すると、このメソッドは不正確な結果を表示し、 'dirty'は空です。
ただし、session.flush()の後にsession.rollback()を使用してこれらの変更をロールバックできます。 だからこそ私は元の値を得ることが可能だと思います。彼らはちょうどどこかに隠れている。
しかしどこですか?
でデータベースにあるが、どのようにロールバックがオブジェクトの前の状態を取得していますか? 私は 'session.flush()'を実行しました。私の変更はデータベースに送られました。 そして両方の状態は、前のものと現在のものがそこに格納されます。私はそれを正しく理解していますか? ロールバックを実行せずに以前の状態に戻すことはできますか? 'user.get_history_after_flush()'のように – MrCyberthrone
私はデータベースサーバーを管理していませんが、flush()を呼び出すと、データベースに変更が加えられます。気づくべきことがあります。これはそのセッションでのみ使用可能になります。これは、この変更が別のセッションで取得されないことを意味します。コミットした場合、以前の値を戻すことはできません。 – metmirr