Ответ 1
Насколько я знаю, нет способа временно изменить уровень изоляции транзакций в Django для существующего соединения (ов) базы данных.
Однако вы можете настроить другое соединение с базой данных, которое отражает ваше соединение с базой данных по умолчанию, но устанавливает уровень изоляции транзакции.
например. в вашем 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,
},
},
}
Чтобы использовать сериализуемый уровень транзакций, вы можете:
- Используйте метод
using()
QuerySet напримерUser.objects.using('serializable').all
-
Добавьте настраиваемый менеджер, который указывает соединение с базой данных с уровнем изоляции транзакции
class SerializableUserManager(models.Manager): def get_queryset(self): return super(SerializableUserManager, self).get_queryset().using('serializable')