Django で使用されるトランザクションのデフォルトの分離レベルを知っていますか? データベースに依存しない方法で分離レベルを設定することは可能ですか?
私は主に mysql と postgres に興味があります。
Django で使用されるトランザクションのデフォルトの分離レベルを知っていますか? データベースに依存しない方法で分離レベルを設定することは可能ですか?
私は主に mysql と postgres に興味があります。
次のように、djangoデータベースオプションを使用して、クライアント/セッションごとにこれを変更することもできます:
DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
分離レベルは mysql ドライバーによって変更されないため、サーバーのデフォルトの分離レベルに依存します。
現時点では、django は分離レベルを設定していません。READ COMMITTED よりも高い分離レベルでは django が正しく動作しないため、これはバグです。しかし、MySQL はデフォルトで REPEATABLE READ を使用しています。分離レベルを設定する設定を追加する計画 ( #14026 ) と、READ COMMITTED をデフォルトにすることについての議論 ( #13906 ) があります。MySQL トランザクションと djangoに関する詳細な記事も書いています。