SQLAlchemy での ORM データ キャッシュの克服
データ管理に SQLAlchemy を利用する場合、ユーザーは、取得したデータがにもかかわらず変更されないというキャッシュの問題に遭遇する可能性があります。データベースに対して直接行われる更新。これは不可解な苦境となる可能性があります。
明らかになったキャッシュ: トランザクション分離を理解する
この動作は SQLAlchemy の明示的なキャッシュによるものではなく、むしろ基本的な特性によるものです。トランザクション分離の。デフォルトでは、SQLAlchemy はトランザクション モードで動作します。データの変更は、session.commit() の呼び出し時にのみデータベースに書き込まれます。
ただし、トランザクションの分離には工夫が必要です。他のアクティブなトランザクションは、変更されたデータにすぐにはアクセスできませんが、自分のトランザクションをコミットまたはロールバックした後でも、変更されたデータを確認できない場合があります。反復可能読み取りとして知られるこの現象により、実際のデータが変更された場合でも、トランザクションはロードされた状態を確実に維持できます。
認識されたキャッシュの無効化
本物のキャッシュではないため、トランザクション分離の影響は接続プーリングを使用することで軽減できます。すべての接続が共通のプールから発信されるようにすることで、異なる接続間でのデータのキャッシュを回避し、更新の可視性を向上させることができます。接続プーリングを有効にするには、pool_recycle パラメータをゼロ以外の値に設定します。
例:
engine = create_engine('mysql://user:password@host/db', pool_recycle=3600)
この場合、接続は 3600 秒ごとにリサイクルされ、データ キャッシュの問題が防止されます。トランザクションの分離に関連します。
以上がデータベースで SQLAlchemy データを変更した後、データが更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。