日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

djongo mysql 回滚_django事物回滚

發布時間:2024/1/23 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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事物回滚的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。