2017-07-08 74 views
0

我使用Django 1.10和Postgres數據庫以及django-rest-framework。我調試我的代碼,無論我在哪裏some_entity.save(),我立即看到數據庫中的變化。問題是我有ATOMIC_REQUESTS = True,這意味着在視圖成功完成之前沒有任何東西被提交到數據庫。我現在很擔心數據庫的完整性 - 如果後來發生異常,沒有東西會回滾Django在交易結束前提交到數據庫

+1

當您說「立即看到db中的更改」時,您的意思是什麼?從目前的交易中,這是可以預料的。 –

+0

嗯,我的意思是我在調試模式下進行線對線。每當我通過任何保存方法時,數據立即在數據庫中更新。我希望它會在交易結束時承諾。如果不是,如果發生異常,交易將如何回滾? –

回答

1

您所描述的是數據庫事務的完美預期行爲。

隨着ATOMIC_REQUESTS = True每個請求被包裝在一個數據庫事務中,這意味着一個事務在接收到請求時開始並且在沒有問題產生響應之後提交。

在交易過程中,您可以閱讀自己的寫作:這就是SQL數據庫的工作方式(相反會令人困惑)。

儘管在大多數配置中,這些寫入是「隔離的」:如果它們還沒有提交,它們將不會從併發請求(在不同的事務中)看到。有關事務隔離的更多詳細信息,請參閱postgresql文檔:https://www.postgresql.org/docs/current/static/transaction-iso.html

+0

謝謝,雖然這對我來說很奇怪。我習慣了JPA和Hybernate在一個我工作的項目上。在那裏,直到交易實施之前,什麼都看不到。要麼他們這樣工作,要麼項目配置如此,否則我會誤導/誤認。 –