Django資料庫補充之事務
阿新 • • 發佈:2018-11-11
往資料庫寫入資料時,如果寫入了不完整的資料,我們稱之為髒資料。事務管理(transaction)可以防止這種情況發生。事務管理一旦監測到寫入異常,會執行回滾操作,即要麼寫入完整的資料,要麼不寫入。在Django中使用事務很簡單,我們來測試一下:
-
新建專案Transaction,建立應用app01,編輯models建立兩張表並執行資料庫遷移,如下:
from django.db import models class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField(max_length=64
-
定義路由:
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^test/$', views.test), ]
-
定義test檢視函式:
from django.shortcuts import render, HttpResponse from . import models def test
-
說明:
- 以上將建立
user_obj
和dept_obj
記錄的行為組合成一個不可分割的原子性操作,原子內執行的資料庫操作發生任何異常,都會執行回滾操作。 - 事物檢查異常回滾,但是不容錯,錯誤還是會丟擲,因此這裡用了異常捕捉。
- 正常情況下訪問
http://127.0.0.1:8000/test/
,將會得到OK響應,如果我們手動將dept_obj = models.Dept.objects.create(title='IT')
的title='IT'
改為name='IT'
,手動造成異常,那麼會觸發事物回滾,寫入的user_obj
也會撤銷。這一點可以檢視資料庫驗證。
- 以上將建立
注意一點:事務需要資料庫引擎支援,比如Innodb引擎就是支援的。