Django ORM 事務 回滾


數據庫事務

在保存訂單數據中,涉及到多張表(OrderInfo、OrderGoods、SKU)的數據修改,對這些數據的修改應該是一個整體事務,即要么一起成功,要么一起失敗。

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)

# 提交從保存點到當前狀態的所有數據庫事務操作
transaction.savepoint_commit(save_id)

 


免責聲明!

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



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