2013-10-31 112 views
0

我有一個讀取Excel表格並保存數據的視圖。如果在該視圖中發生任何錯誤(500),我需要一種方式數據庫事務不應該提交,因此它們應該回滾。數據庫事務

我使用下面的代碼,但它會在出現錯誤之前保存數據。我的任務是如果數據庫應該回滾視圖中有任何錯誤。

從django.db進口交易

@ transaction.commit_on_success 高清upload_data(請求): .....等等.....
obj.save()

錯誤來自這一行 想要回滾數據庫,因爲它 之前這個視圖被稱爲 obj1.save() 如果錯誤在這裏注意應該保存。 感謝

+0

您使用的是什麼版本的Django? –

+0

我正在使用Django 1.5 – user734353

回答

0

Django's documentation on transactions,如果你使用Django 1.6,我想整個包住鑑於@transaction.atomic

from django.db import transaction 

@transaction.atomic 

如果你想這種行爲爲您的整個應用程序,在您的數據庫配置設置ATOMIC_REQUESTS=True ,如該文檔中所述。

否則,如果你是在1.5和沒有得到你所期望的行爲,你可以切換到@transaction.commit_manually,包裹在try塊的整體視圖,並做了commit()rollback()明確。它並不優雅,但如果您想要精確控制何時完成提交,它可能會工作。

+0

我正在使用Mysql,我也試過你的方法。但它不起作用。我也嘗試除了塊每個保存對象 – user734353

0

嘗試將@ transaction.commit_on_success放在您視圖的頂部。所以,如果你在該視圖函數中出現錯誤,它會回滾其他的提交你的工作。