相关疑难解决方法(0)

Django ORM中的每事务隔离级别

是否可以为自定义事务设置隔离级别(但不能使用原始sql)?

例如,类似于:

with transaction.commit_on_success(isolation='SERIALIZABLE'):
    bla
Run Code Online (Sandbox Code Playgroud)

python django transactions django-orm

16
推荐指数
1
解决办法
1360
查看次数

在Django中,如何实现事务的可重复读取?

我有一个函数,它在同一个数据集上执行多个查询,我想确保所有查询都能看到完全相同的数据.

就SQL而言,这意味着支持它的数据库的REPEATABLE READ隔离级别.如果数据库不具备,我不介意更高级别甚至完全锁定.

据我所知,情况并非如此.即如果我在一个Python shell中运行类似这样的代码:

with transaction.atomic():
    for t in range(0, 60):
        print("{0}: {1}".format(t, MyModel.objects.count()))
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

一旦我MyModel.objects.create(...)在另一个中,运行循环看到的值立即增加.这正是我想要避免的.进一步的测试显示行为符合READ COMMITTED级别,这对我的口味来说太宽松了.

我还想强调一点,我想要更严格的隔离级别只针对单个函数,而不是整个项目.

我最好的选择是什么?

在我的特殊情况下,我唯一关心的数据库是PostgreSQL 9.3+,但我也希望与SQLite3有一些兼容性,在这种情况下即使完全锁定整个数据库也没关系.然而,显然,解决方案越普遍,它就越优选.

python django transactions transaction-isolation isolation-level

10
推荐指数
1
解决办法
4700
查看次数