关于Django中的transaction.atomic()的混淆

时间:2017-04-06 16:12:49

标签: django transactions

我有一个视图,其中我做了一系列的模型保存:

with transaction.atomic():
    modelA.save()
    modelB.save() 
    ...

我希望一次完成所有保存,但是当我在执行modelA.save()之后和执行modelB.save()之前检查数据库时,我看到表modelA写入已更改,即对modelA的写入已经提交给db。我认为transaction.atomic()块中的所有写入都将在最后一起提交。我错过了什么?我使用的是django 1.10和Oracle 12g。感谢

2 个答案:

答案 0 :(得分:1)

如果您使用多个数据库,则应指定要与using使用的数据库:

with transaction.atomic(using='my_db'):
    modelA.save()
    modelB.save() 

答案 1 :(得分:0)

我找到了解决方案:

transaction.set_autocommit(False, using='my_db')
modelA.save()
modelB.save()
transaction.commit(using='my_db')
transaction.set_autocommit(True, using='my_db')

我的问题是对所讨论的db表的约束意味着必须将保存作为一个事务完成。由于某种原因,transaction.atomic()不起作用......