2017-04-06 85 views
0

transaction.atomic()我有我做了一系列的模型保存像这样一个观点:混淆在Django

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

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

+0

你怎么执行后,检查数据库modelA.save()之前和执行modelB.save()?你所描述的是预期的行为 –

+0

我查询sql_developer。 –

+0

当然有查询。我的意思是,你正在做的: 与transaction.atomic(): modelA.save() ###在这里,您查询数据库 modelB.save() 你想用中断执行。 要了解我期望看到的内容,您需要以COMMITED READ模式打开事务。我猜想Oracle Django的后端有一个属性。 –

回答

0

我找到了一个解决方案:

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

我的问题是,对有问题的数据库表的约束意味着节省了必须做作为一个事务。出于某种原因,transaction.atomic()没有工作......

0

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

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