まず、トランザクション
1.グローバルな業務を有効に
トランザクションにおける各リクエストをラップされたWebアプリケーションでは、一般にトランザクション処理モードで使用されています。この機能は、使用することは非常に簡単です、あなただけのTrueに設定されたエントリーATOMIC_REQUESTSを設定する必要があります。
それはこのように動作します:リクエストが来たとき、Djangoはビューのメソッドを呼び出す前に、トランザクションを開きます。リクエストが適切に準備し、正しく結果を返した場合、Djangoはトランザクションをコミットします。そうでなければ、Djangoはトランザクションをロールバックします。
= {DATABASES 'デフォルト':{ 'ENGINE': 'django.db.backends.mysql'、 'NAME': 'mxshop'、 'ホスト': '127.0.0.1'、 'PORT': '3306'、 「USER ':'ルート' 'PASSWORD ':' 123'、 ' OPTIONS ':{ "init_command": "= SETのdefault_storage_engine' 'INNODB" # はinit_command' ':「SET sql_modeの=' STRICT_TRANS_TABLES ' "、オープン#1を設定厳密SQLモード } 「ATOMIC_REQUESTS」:真、#グローバル情勢を有効にし、プロセス全体でHTTPリクエストの応答にバインドされている 偽の、#自動送信、注意をキャンセルグローバル:#「自動コミット」 }、 "OTHER '{ ' ENGINE ':' django.db.backends.mysql」、 ... }#はまた、他のデータベースを構成することができます }
2、局所業務
原子性は、プロパティデータベースのトランザクションです。私たちは、原子含むコードのブロックを作成することができ、アトミック使用します。ブロック通常動作が完了すると、すべての変更がデータベースにコミットしています。例外がある場合は逆に、変更はロールバックされます。
アトミック・ブロックを管理することもコード方法に埋め込まれてもよいです。外部コードブロックは例外をスローこの場合も内部コードブロック通常動作場合、それは、データベースへの変更を送信する方法はありません。
使用方法1:機能を使用するデコレータを行うには
django.db輸入取引から transaction.atomic @ デフviewfunc(リクエスト): #このコードは、トランザクション内で実行されます。 do_stuff()
シンタックス2:セットポイント事務を保存し、実際には、コンテキストマネージャとして使用します
django.db輸入取引から デフviewfunc(リクエスト): #このコードは、自動コミットモード(Djangoのデフォルト)で実行されます。 do_stuff() transaction.atomicと():#保存点 #このコードはトランザクション内で実行されます。 do_more_stuff() do_other_stuff()
第二に、ロック
select_for_update() を更新するためのT1からSELECT * models.T1.objects.select_for_update()フィルタ(上記ID = 1)#排他ロック(ミューテックス)読み取りや書き込みをしません
三、MySQLのロックとの取引で
MySQLのデフォルトの自動コミット、
ロックを確認し、最初に自動的にキャンセルをコミットします。
トランザクション:
ビジネスを開き、我々は手動でコミットする必要があり、トランザクションが終了します。