我有一个函数,在同一个数据集上执行多个查询,我想确保所有查询都能看到完全相同的数据。
就SQL而言,这意味着支持它的数据库的可重复读取隔离级别。如果数据库不起作用,我不介意有更高的级别,甚至完全关闭。
据我所见,情况并非如此。一、 e.如果我在一个Python shell中运行类似的代码:
with transaction.atomic():
for t in range(0, 60):
print("{0}: {1}".format(t, MyModel.objects.count()))
time.sleep(1)
当我在另一个循环中执行MyModel.objects.create(...)
时,运行循环看到的值立即增加。这正是我想要避免的。进一步的测试显示,该行为与READ COMMITTED级别匹配,这对我的口味来说太宽松了。
我还想强调一点,我想要更严格的隔离级别只针对单一功能,而不是整个项目。
我最好的选择是什么?
在我的特殊情况下,我唯一关心的数据库是PostgreSQL 9.3+,但我也希望与SQLite3兼容,在这种情况下,即使完全锁定整个数据库也可以。然而,显然,解决方案越笼统,就越可取。
目前没有回答
相关问题 更多 >
编程相关推荐