是否可以为自定义事务设置隔离级别(但不能使用原始 sql)?
例如,像这样的东西:
with transaction.commit_on_success(isolation='SERIALIZABLE'):
bla
最佳答案
据我所知,在 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.postgresql',
'USER': 'postgres_user',
'PASSWORD': 's3krit',
'OPTIONS': {
'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE,
},
},
}
要使用可序列化事务级别,您可以:
使用
using()
QuerySet method 例如User.objects.using('serializable').all
添加 custom manager指定具有事务隔离级别的数据库连接
class SerializableUserManager(models.Manager): def get_queryset(self): return super(SerializableUserManager, self).get_queryset().using('serializable')
关于python - Django ORM 中的每个事务隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386738/