2016-12-01 71 views
0

我正在使用Django Python框架和MySQL DBMS。Django模型不是實時向數據庫持久保存數據

在下面的截圖中,我創建使用SurveyDraft.objects.create()如圖所示new_survey_draft對象,假設它應該建立在surveydraft數據庫表中的新行,但作爲也顯示在屏幕截圖中,並且在調試我的代碼後,new_survey_draft對象創建爲id = pk = 270,而在右邊的其他窗口中顯示的數據庫表沒有id = 270

publish_survey_draft設定斷點即使當()中的對象實例化後稱爲,我稱爲SurveyDraft.objects.get(PK = 270),其返回的對象,但仍有不ID在數據庫表中爲270

最後,在恢復代碼並從所有定義中返回後,該行已成功添加到DB表中,其中id = 270

我在想,看到背後發生了什麼,是否有可能Django將數據存儲在對象中,而不需要實時保存到數據庫,並且只在稍後的某個執行點上將數據全部保留在一起?

我一直被困在這個小時,並找不到任何有用的在線,所以我真的很感激任何關於這個問題的建議。

enter image description here

+1

這只是交易,當然。 –

+0

@DanielRoseman你是什麼意思?你能澄清嗎? –

+0

我發現我自己的「交易」意味着你的意思,下面是我的答案。如果你更多地解釋了這個概念而不是你上面的評論,並且對我的問題投下了贊成票,那將會更有幫助和讚賞。 @DanielRoseman但無論如何感謝。 –

回答

0

深挖這個問題後,我才發現,有一個叫原子概念3.請這是一個在我的Django項目通過在settings.py設置ATOMIC_REQUESTS爲True啓用根據DATABASES詞典解釋here

它的工作原理是這樣的。在調用視圖函數之前,Django啓動一個 事務。如果響應沒有問題產生,Django 提交事務。如果視圖產生異常,Django 回滾事務。

這就是爲什麼在使用斷點調試我的代碼時,這些更改不會持久存在於數據庫中,因爲一旦成功響應返回,更改將只提交給DB。