日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Django数据库补充之事务

發(fā)布時間:2025/3/17 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django数据库补充之事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

往數(shù)據(jù)庫寫入數(shù)據(jù)時,如果寫入了不完整的數(shù)據(jù),我們稱之為臟數(shù)據(jù)。事務(wù)管理(transaction)可以防止這種情況發(fā)生。事務(wù)管理一旦監(jiān)測到寫入異常,會執(zhí)行回滾操作,即要么寫入完整的數(shù)據(jù),要么不寫入。在Django中使用事務(wù)很簡單,我們來測試一下:

  • 新建項(xiàng)目Transaction,創(chuàng)建應(yīng)用app01,編輯models創(chuàng)建兩張表并執(zhí)行數(shù)據(jù)庫遷移,如下:

    from django.db import modelsclass 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)

    ?

  • 定義路由:

    from django.conf.urls import url from app01 import viewsurlpatterns = [url(r'^test/$', views.test), ]

    ?

  • 定義test視圖函數(shù):

    from django.shortcuts import render, HttpResponse from . import modelsdef test(request):try:from django.db import transaction # 導(dǎo)入事務(wù)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')

    說明:

  • 以上將創(chuàng)建user_obj和dept_obj記錄的行為組合成一個不可分割的原子性操作,原子內(nèi)執(zhí)行的數(shù)據(jù)庫操作發(fā)生任何異常,都會執(zhí)行回滾操作。
  • 事物檢查異?;貪L,但是不容錯,錯誤還是會拋出,因此這里用了異常捕捉。
  • 正常情況下訪問http://127.0.0.1:8000/test/,將會得到OK響應(yīng),如果我們手動將dept_obj = models.Dept.objects.create(title='IT')的title='IT'改為name='IT',手動造成異常,那么會觸發(fā)事物回滾,寫入的user_obj也會撤銷。這一點(diǎn)可以查看數(shù)據(jù)庫驗(yàn)證。

  • 注意一點(diǎn):事務(wù)需要數(shù)據(jù)庫引擎支持,比如Innodb引擎就是支持的。

    總結(jié)

    以上是生活随笔為你收集整理的Django数据库补充之事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。