2013-01-12 30 views
0

我已經閱讀了Django事務並將在我的項目中使用它,但這裏有幾個我想知道的問題。其實我想在註冊時使用交易,我在註冊時在2-3個位置插入,所以我希望如果任何查詢失敗,則不應該執行插入。所以根據Django文檔,我想我需要使用commit_on_success類型的事務。但我想知道的是這些交易依賴於數據庫或它是Django的所有內部?我是否需要更改數據庫存儲引擎?如果我將不得不在不同的存儲引擎上使用它,甚至在未來的不同數據庫中使用它,如SQL中的一個表和nosql中的一個?或者這沒關係?瞭解Django事務的工作

另外,如果我將使用它喜歡:

from django.db import transaction 

def function1(): 
    #code here without transaction 

@commit_on_success 
def function2(): 
    #code here with transaction 

然後函數2將工作與承諾,如果所有方法的代碼一定會成功,但將與FUNCTION1發生什麼作爲之前的交易是進口的?什麼類型的交易將被應用於function1?我想function1沒有任何交易,但行爲正常,因爲它在其他模型的表單代碼中工作,所以我該怎麼辦?

所以我的問題是,如果沒有事務處理,但每個事物都有正常的行爲,但有一個事務處理方法?它會通過使用裝飾器和其他方法將正常行爲或我需要做別的?並且這些交易也依賴於數據庫和數據庫存儲引擎如innodb這些交易只是django內部交易?

請告訴,以便我可以有清楚的概念,在此先感謝。

回答

0
  • Django使用數據庫事務。
  • 您不需要更改DB存儲引擎。
  • 並非所有數據庫引擎都支持交易
  • 如果您在數據庫引擎不支持它的情況下使用事務管理(例如帶有MyISAM表的MySQL),那麼在沒有事務的情況下,所有事務仍然有效。

I.e.在一種方法中使用@commit_on_success是安全的。將來如果您在沒有事務支持的情況下更改爲數據庫,則不會有任何問題。

+0

是的Marat我需要改變一個表innodb和它的工作 – Hafiz