python - Django ORM 中的每个事务隔离级别

标签 python django transactions django-orm

是否可以为自定义事务设置隔离级别(但不能使用原始 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,
            },
        },
    }

要使用可序列化事务级别,您可以:

  1. 使用using() QuerySet method 例如User.objects.using('serializable').all

  2. 添加 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/

相关文章:

java - Spring 用户事务与 hibernate

python - 如果 python 中另一个输入参数为 TRUE,是否有一种方法将函数的所有输入参数设置为 TRUE?

python - 将用户输入限制为 64 位?

python - 如何根据 Python 中的 OpenAPI3 规范验证 HTTP 请求?

python - 在Python中读取#char

django - 在 Django 中为拍卖玩具应用处理并发的最佳方法

python - Django初学者问题

hibernate - Spring 的自动 hibernate 事务管理?

python - Django 查询中 or-ing Q 对象的性能影响

java - 当连接在事务中关闭时会发生什么?