Mysql
 sql >> база данни >  >> RDS >> Mysql

Django DB транзакции и блокирания

Имайте предвид, че може да искате да използвате по-ясния with -стилов синтаксис. Следното трябва да е идентично с вашия код по-горе, но по-питонично.

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)

или с декоратор

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)

Това обаче не решава проблема ви с безизходица...

Може да имате успех с понижаването на нивото на изолация на вашата транзакция. Това по подразбиране в mysql е REPEATABLE READ което е твърде строго за повечето употреби. (oracle по подразбиране е READ COMMITTED ')

Можете да постигнете това, като добавите това към вашия 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. Codeigniter активен запис с няколко харесвания или?

  2. gitlab runner:mysqld:Не мога да прочета директорията на '/etc/mysql/conf.d/'

  3. Инсталиран MacPorts PHP, сега не може да взаимодейства с MySQL - Mac OS X

  4. MySql Търсене на пълен текст

  5. Как да добавя във всяка връзка (a href) таг атрибут rel с помощта на php?