session.merge()はインスタンスとその関連する子の現在の状態をデータベース内の既存のデータとsession.merge()せる"と書かれています。#1SQLAlchemyは、セッション内の各IDを持つ単一のオブジェクトを持つように設計されています。ネットワークから取得したときや、長いトランザクションを避けるためにオフラインロックを実装したときなど、既知のIDを持つオブジェクトを再作成する必要がある場合があります。データベースに存在する可能性がある既知のIDを持つオブジェクトを作成すると、セッションがすでにこのIDを持つオブジェクトを追跡している可能性があります。それmerge()メソッドの目的です。セッションにアタッチされているオブジェクトを返すため、セッション内で同じIDを持つオブジェクトが重複することはありません。以下は、何が起こっているのかを示す例です。obj3.state出力は以下のとおりです。obj2の状態を既存のオブジェクトにマージして返します。以下はデータベースからの状態のロードを説明する別の例です。obj3.state2出力は以下のとおりです。merge()は、消去したため、セッション内で同じIDを持つオブジェクトを見つけられませんでした。部分的に割り当てられた状態で新しいオブジェクトを作成しましたが、残りはデータベースからロードされます。#2私がマージについて気づいたことの1つは、アタッチされていないオブジェクトのフィールドにアクセスしても、マージ中にフィールドが変更されることです。単純なクラスがあるとします。'bar')それでは、以下はうまく結合しているようです。'bar'これは直感に反するものです。__dict__に属性が存在するだけでこれが起こります。この「機能」はドキュメントに記載されています。