Czy można ustawić poziom izolacji dla transakcji niestandardowej (ale nie dla surowego sql)?Poziom izolacji transakcji w programie Django ORM
Na przykład coś takiego:
with transaction.commit_on_success(isolation='SERIALIZABLE'):
bla
Czy można ustawić poziom izolacji dla transakcji niestandardowej (ale nie dla surowego sql)?Poziom izolacji transakcji w programie Django ORM
Na przykład coś takiego:
with transaction.commit_on_success(isolation='SERIALIZABLE'):
bla
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:
using()
QuerySet method np User.objects.using('serializable').all
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')
zaakceptowania. Dziękuję Ci. –