新しいマッピングをsession.merge
などのデータベースデータとマージする方法はあるのですが、データベースを更新することはできませんか? gitでpull
を実行したときと同様に、リモート状態と以前のローカル状態(未確定のコミットを含む可能性があります)のマージであるローカル状態を取得しますが、リモート状態は更新されません。ここでは、session.merge
を実行することによって生じる状態のローカルな「ビュー」を取得したいと考えています。SqlAlchemyでローカルの「マージ」
たぶん、その後session.merge
をやって、後session.rollback
でこれを実現するだろう、(session.begin_nested
付き)セーブポイントを作り、実際には、DBの操作を元に戻す暗示することができますトランザクション管理のこの種を(必要としない方法があります、私の目的のために非常に効率的ではありません)?
session.no_autoflush
を使用しますか?私がやりたいことのために
例コード:
local_merge = session.merge_local(Model(...))
# do stuff with local_merge...
remotes = session.query(Model).all()
# remotes should remain "old" db versions, as no data was pushed
return something
編集:だから、私は非効率的であることrollback
方法で間違っているかもしれないと思います。少なくとも、commit
が発行されていない限り、高価な取り消し操作は行わず、トランザクションをチャッキングするだけです。
Hmm、cool。それは理にかなっており、それが私が探している行動です。どうもありがとう! –
クエリを実行して強制的にフラッシュするか、そうでなければ適切なバージョンのデータを公開しないかは、私が混乱しました。 –