Django中mysql使用事務以及批量插入數據

使用事務可以有效的防止插入數據時出現錯誤影響數據的完整性,再出現錯誤的時候可以回滾事務,做到要麼全部插入成功要麼全部都不插入

from django.views import View
from main import models
from django.db import transaction
import json

class BillTypeAdd(View):
    '''
    新增賬單類別api
    '''
    @transaction.atomic # 事務修飾器
    def post(self, request):
        status = False
        data = request.POST.get('data')

        # 用於事務保存
        savePoint = None

        try:
            data = json.loads(data)
            # 用於存儲實例對象
            BillTypeModels = []
            for item in data:
                item.pop('id')
                BillTypeModels.append(models.BillType(**item))

            savePoint = transaction.savepoint() # 事務保存點

            models.BillType.objects.bulk_create(BillTypeModels)

            status = True
        except Exception as error:
            if savePoint:
                # 回滾事務
                transaction.rollback(savePoint)
            status = error.__str__()

        return HttpResponse(status)    

幾處重點需要注意

  • 導包,from django.db import transaction
  • 事務的保存點,savePoint = transaction.savepoint()
  • 回滾事務,transaction.rollback(savePoint)
  • 批量插入,bulk_create。批量插入需要提供的數據爲models的實例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章