Django的ORM實現資料庫事務操作

2021-09-20 01:18:49 字數 2656 閱讀 9124

在django中實現資料庫的事務操作

在學習mysql資料庫時,mysql資料庫是支援原子操作的.

什麼是資料庫的原子操作呢??打個比方,乙個消費者在乙個商戶裡刷信用卡消費.

交易正常時,銀行在消費者的賬戶裡減去相應的款項,在商戶的帳戶加上相應的款項.

但是如果銀行從消費者的賬戶裡扣完錢之後,還未在商戶的帳戶裡加上相應的款項時.

由於某些原因,系統或者資料庫出現異常了,那麼此時錢已經從消費者的賬戶裡扣除了,但是商戶的賬戶裡卻沒有加上相應的款項,讓會讓商戶遭受損失.

這種情況下,最好的解決辦法就是使用資料庫的原子性操作.

如果資料庫使用了事務操作,當出現上面的操作異常時,待資料庫正常執行後,資料庫系統會把先前執行了一半的操作退回到這個操作之前的狀態,

這個通常稱為資料庫的回滾,也即資料庫的原子性操作.

django中,正常的資料庫操作應該是原子性操作的.

在django的orm中,想使用事務操作時,要先導入乙個django的內建模組

from django.db import transaction
專案的model為:

from django.db import models

class userinfo(models.model):

username=models.charfield("使用者名稱",max_length=32)

email=models.emailfield("郵箱",max_length=32)

class group(models.model):

title=models.charfield("組名",max_length=32)

配置好url

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^index/',views.index),

]

路由對應的檢視函式為

return httpresponse("出現錯誤....")

首在先瀏覽器中開啟,瀏覽器的頁面上出現

開啟對應的資料庫可以看到,userinfo資料表和group資料表中已經新增一條記錄

現在修改檢視函式,使程式出現執行錯誤,

return httpresponse("出現錯誤....")

再次重新整理瀏覽器,可以看到

而重新整理兩張資料表,可以看到兩張資料庫都沒有新增資料記錄.

這就是django的orm所支援的事務操作.!

Django資料庫ORM操作

簡單的說,orm是通過使用描述物件和資料庫之間對映的元資料,將程式中的物件自動持久化到關聯式資料庫中。orm在業務邏輯層和資料庫層之間充當了橋梁的作用。讓我們從o r開始。字母o起源於 物件 object 而r則來自於 關係 relational 幾乎所有的軟體開發過程中都會涉及到物件和關聯式資料庫...

django中使用ORM模型修改資料庫的表名

在django中,使用models.py建立好一張表後,如果不指定表的名字,那麼表的名字就預設為 model modelname例如 class book models.model id models.autofield primary key true title models.charfield...

django中使用ORM模型修改資料庫的表名

在django中,使用models.py建立好一張表後,如果不指定表的名字,那麼表的名字就預設為 model modelname例如 class book models.model id models.autofield primary key true title models.charfield...