保存Django模型抛出OperationalError:无法在事务中启动事务

时间:2018-02-06 19:59:30

标签: python django django-models django-unittest

我在Django unittest中看到一个奇怪的错误,在极少数情况下,尝试保存模型实例会引发异常:

OperationalError: cannot start a transaction within a transaction

导致这种情况的原因是什么?

真正奇怪的是,这发生在如下的循环中:

for i in range(10):
    obj = MyModel(name='blah %i' % i)
    obj.save()

并且在抛出异常之前会经历几次迭代。

由于它是非确定性的,因此诊断起来非常令人沮丧,而且我不清楚发生了什么。由于我使用Django的标准TransactionTestCase,我认为这个错误是不可能的,因为TestCase将每个测试包装在atomic()上下文管理器中以包装事务中的所有更改。不应该试图创建另一个交易。

我能想到的另一件事可能会影响到这一点,我的模型有一个post_save信号处理程序,可能是某人在交易之外打破或者干扰,但我不确定如何测试它,因为我无法可靠地重现错误。

0 个答案:

没有答案