2014-12-09 35 views

Odpowiedz

8

O ile mi wiadomo, nie ma sposobu, aby tymczasowo zmienić poziom izolacji transakcji w Django do istniejącego połączenia (ów) bazy danych.

Można jednak skonfigurować inne połączenia z bazą danych, które odzwierciedlają domyślne połączenia z bazą danych, ale określa poziom izolacji transakcji.

np. w settings.py:

DATABASES = { 
    'default': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit', 
    }, 
    'serializable': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresl', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit', 
     'OPTIONS': { 
      'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE, 
     }, 
    }, 
} 

Aby korzystać z poziomu transakcji można zaszeregować, można:

  1. Użyj using()QuerySet method np User.objects.using('serializable').all
  2. Dodaj custom manager określający połączenie z bazą danych z poziomu izolacji transakcji

    class SerializableUserManager(models.Manager): 
        def get_queryset(self): 
         return super(SerializableUserManager, self).get_queryset().using('serializable') 
    
+0

zaakceptowania. Dziękuję Ci. –