2017-04-06 120 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()