ジャンゴ[9]総務・ロック

まず、トランザクション

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のデフォルトの自動コミット、
ロックを確認し、最初に自動的にキャンセルをコミットします。

トランザクション:

ビジネスを開き、我々は手動でコミットする必要があり、トランザクションが終了します。

おすすめ

転載: www.cnblogs.com/youxiu123/p/11600536.html