sql >> Database teknologi >  >> RDS >> Mysql

Django DB-transaktioner og dødvande

Bemærk, at du måske vil bruge den mere klare with -stil syntaks. Følgende burde være identisk med din kode ovenfor, men mere pytonisk.

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)

eller med en dekoratør

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)

Det løser dog ikke dit deadlock problem...

Du kan få succes med at sænke dit transaktionsisolationsniveau. Dette er standard på mysql til REPEATABLE READ hvilket er for strengt til de fleste anvendelser. (oracle er som standard READ COMMITTED ')

Du kan opnå dette ved at tilføje dette til din 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. SQL JOINs Tutorial med eksempler

  2. Forstå GROUP BY-klausul

  3. Dato og tid Lokaliteter tilgængelige i MariaDB

  4. Oracle 11g Reports and Forms Properties Masseopdateringer