SQLAlchemy のキャッシュの理解と無効化
データベース対話の領域では、SQLAlchemy は認識されるキャッシュの問題を時々提起します。これは、SQLAlchemy を通じて挿入または更新されたデータが、スコープ外で行われた変更をすぐに反映しない場合に発生します。 SQLAlchemy はトランザクション内でローカル ID マップを採用していますが、多くの場合、主な原因はトランザクション分離の影響です。
SQLAlchemy のセッションは、デフォルトでトランザクション方式で動作します。 session.commit() が呼び出されるまで、変更はデータベースに保存されません。この期間中、同時トランザクションはこれらの変更を監視しません。ただし、トランザクションの分離性により、さらに複雑な層が生じます。
進行中のトランザクションは、コミットされていない変更を認識しないだけでなく、コミットまたはロールバックした後でも変更を認識できない可能性があります。これは反復読み取りの概念によるものです。このシナリオでは、トランザクションはデータの最初のスナップショットを保持し、他のトランザクションで行われたその後の変更が反映されないようにします。
この分離動作を無効にして SQLAlchemy に最新のデータを取得させるには、データベース接続のトランザクション分離レベル。これは、データベース エンジンの構成でisolation_levelパラメータを設定することによって実現できます。 「READ COMMITTED」に設定するなど、分離レベルを下げると、同時トランザクションはコミットされた変更を監視できるようになります。
分離レベルを下げると、潜在的な同時実行の問題が発生する可能性があることに注意することが重要です。変更を加える前に、データの一貫性とパフォーマンスの間のトレードオフを慎重に検討してください。
以上がSQLAlchemy のキャッシュの問題を解決し、データに変更がすぐに反映されるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。