djongo mysql 回滚_django事物回滚
往數據庫寫入數據時,不經意間就會寫入不完整的數據,我們稱之為臟數據。事務管理(transaction)可以防止這種情況發生。事務管理一旦檢測到寫入異常,會執行回滾操作,即要么寫入完整的數據,要么不寫入。在Django中使用事務很簡單:
1.新建項目Transaction,創建應用app01,編輯models創建兩張表并執行數據庫遷移,如下:
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField(max_length=64)
class Dept(models.Model):
title = models.CharField(max_length=32)
2.定義路由:
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^test/$', views.test),
]
3.定義test視圖函數;
from django.shortcuts import render, HttpResponse
from . import models
def test(request):
try:
from django.db import transaction # 導入事務
with transaction.atomic():
user_obj = models.UserInfo.objects.create(username='Lena', email='example@live.com')
dept_obj = models.Dept.objects.create(title='IT')
except Exception as e:
return HttpResponse('error happened, db rollback')
return HttpResponse('OK')
復制代碼
說明:
以上將創建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引擎就是支持的。
總結
以上是生活随笔為你收集整理的djongo mysql 回滚_django事物回滚的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis哨兵模式没有切换主机_Redi
- 下一篇: liferay mysql driver