Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Transakcje i zakleszczenia Django DB

Pamiętaj, że możesz chcieć użyć bardziej przejrzystego with składnia stylu. Poniższy kod powinien być identyczny z powyższym kodem, ale bardziej pytoniczny.

from django.db import transaction
from __future__ import with_statement

def process(self, db, data):

    with transaction.commit_on_success(using=db):
        # do things with my_objects...
        for obj in my_objects:
            obj.save(using=db)

lub z dekoratorem

from django.db import transaction

@transaction.commit_on_success(using=db)
def process(self, db, data):    

    # do things with my_objects...
    for obj in my_objects:
        obj.save(using=db)

To jednak nie rozwiązuje problemu impasu.

Możesz odnieść sukces w obniżeniu poziomu izolacji transakcji. To domyślnie mysql to REPEATABLE READ co jest zbyt surowe dla większości zastosowań. (Oracle domyślnie READ COMMITTED ')

Możesz to osiągnąć, dodając to do pliku settings.py

MYSQL_DATABASE_OPTIONS = {'init_command': 'SET storage_engine=INNODB; SET 
                 SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;'}

DATABASES = {
  'default': {  # repeat for each db
       'ENGINE':  ... etc
       ...
       ...
       'OPTIONS': MYSQL_DATABASE_OPTIONS
      }
  }



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wartość SQL_CALC_FOUND_ROWS za pomocą przygotowanych instrukcji?

  2. Jak zaktualizować Bazę Danych podczas zaznaczania checkboxa za pomocą jquery?

  3. Ładowanie MySQL .csv nie powiodło się z powodu Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się

  4. Dołącz do wielu tabel o tej samej nazwie kolumny

  5. Konwertuj MySQL na SQLlite