sql >> Databáze >  >> RDS >> Mysql

Django DB transakce a uváznutí

Všimněte si, že možná budete chtít použít jasnější with -syntaxe stylu. Následující text by měl být stejný jako váš výše uvedený kód, ale více pytonický.

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)

nebo s 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)

To však neřeší váš problém se zablokováním..

Možná budete mít úspěch se snížením úrovně izolace transakcí. Toto výchozí nastavení na mysql je REPEATABLE READ což je pro většinu použití příliš přísné. (výchozí nastavení Oracle je READ COMMITTED ')

Můžete toho dosáhnout přidáním tohoto do 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. Instalace konkrétních verzí balíčků pomocí pip

  2. Odečíst měsíce od aktuálního data sql

  3. získat intervaly neměnné hodnoty z posloupnosti čísel

  4. Jak se připojit k databázi SQL serveru z aplikace Windows 10 UWP