django中怎么使用mysql數據庫的事務


Mysql數據庫事務:

在進行后端業務開始操作修改數據庫時,可能會涉及到多張表的數據修改,對這些數據的修改應該是一個整體事務,即要么一起成功,要么一起失敗

Django中對於數據庫的事務,默認每執行一句數據庫操作,便會自動提交。我們需要在保存數據庫操作中自己控制數據庫事務的執行流程。

在Django中可以通過django.db.transaction模塊提供的atomic來定義一個事務,atomic提供兩種用法:

  • 裝飾器用法  
from django.db import transaction @transaction.atomic def viewfunc(request): # 這些代碼會在一個事務中執行
    ...

 

  • with語句用法 
from django.db import transaction def viewfunc(request): # 這部分代碼不在事務中,會被Django自動提交
 ... with transaction.atomic(): # 這部分代碼會在事務中執行
        ...

在Django中,還提供了保存點的支持,可以在事務中創建保存點來記錄數據的特定狀態,數據庫出現錯誤時,可以恢復到數據保存點的狀態

from django.db import transaction # 創建保存點
save_id = transaction.savepoint() # 回滾到保存點
transaction.savepoint_rollback(save_id)

補充:

mysql事務:一組mysql語句,放在同一事務中,要么都成功,要么都失敗。

 

1)mysql事務基本操作:

 

​ begin或start transaction:手動開啟一個mysql事務。

 

​ commit: 事務提交,讓事務中sql語句的執行結果永久有效。

 

​ rollback: 事務回滾,撤銷事務中sql語句的執行結果。

 

2)mysql事務的保存點:

 

​ 在mysql事務中,可以設置事務保存點,在進行事務語句回滾時可以只回滾到某個保存點。

 

​ savepoint `保存點名稱`: 設置mysql事務保存點。

 

​ rollback to `保存點名稱`: 回滾事務語句到保存點的位置,保存點之后sql語句的執行結果會被撤銷。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM