好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 解決Django transaction進行事務管理踩過的坑

解決Django transaction進行事務管理踩過的坑

熱門標簽:房產電銷外呼系統 上海機器人外呼系統哪家好 地圖標注微信發送位置不顯示 315電話機器人廣告 浙江電銷卡外呼系統好用嗎 蓋州市地圖標注 地圖制圖標注位置改變是移位嗎 南京銷售外呼系統軟件 地圖標注的意義點

概要

Transaction是django進行數據庫原子性操作在python層面上的實現。

簡單來說, 被transaction.atomic()包裹的代碼塊只在代碼塊順利完成后進行數據庫層面的commit。實際開發當中,遇到了一些問題。

1. transaction事務內不執行數據庫的commit操作

除非手動commit

transaction最基本的功能。

代碼場景:

在事務當前啟動celery異步任務, 無法獲取未提交的改動。

def example_view(request):
    with transaction.atomic():
        change_obj() # 修改對象變量
        obj.save()
        async_task.delay(obj.id)
def async_task(obj_id):
    obj = Model.objects.get(pk=obj_id)
    read_the_obj() # 讀取對象信息

在使用transaction當中, Model.save()都不做commit,因此如果在transaction當中設置異步任務,使用get()查詢數據庫,將看不到對象在事務當中的改變.這也是實現”可重復讀”的事務隔離級別,即同一個事務里面的多次查詢都應該保持結果不變。

2.transaction只對數據庫層的操作進行事務管理

不能理解為python操作的事務管理

代碼如下:

def example_view(request):
    tag = False
    with transaction.atomic():
        tag = True
        change_obj() # 修改對象變量
        obj.save()
        raise DataError
    print("tag = ",tag)
tag = True #輸出內容

即使事務代碼塊發生了DataError,事務回滾,也僅是數據庫層面的回滾,針對python的操作依然已完成。

甚至是對Model.Object進行的操作會也會存在變量當中。

如:

def example_view(request):
    obj.changed = False
    with transaction.atomic():
        obj.changed = True
        change_obj() # 修改對象其他變量
        obj.save()
        raise DataError
    print("obj.changed = ",obj.changed)
obj.changed = True #輸出內容

發生Dataerror異常的回滾僅在數據庫層面操作,因此不可以根據model object的屬性值判斷是否正確完成了事務。

另外,雖然Django對數據庫層面以ORM完成了很具體的抽象,但應該要清楚地意識到我們操作的model object和數據庫內容本質不同,DJANGO只在查詢和提交時進行數據庫操作。

補充:Django 事務transaction.atomic()的使用方法

看代碼吧~

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View
from django.db import transaction   # 導入事務 
 
# 類視圖 (事務,@transaction.atomic裝飾器)
class MyView(View): 
    @transaction.atomic
    # transaction.atomic裝飾器可以保證該函數中所有的數據庫操作都在一個事務中。
    def post(self, request):
 
        # 數據庫操作1。。。
        # 數據庫操作2。。。        
        return HttpResponse('ok') 
 
# 類視圖 (事務,保存點的使用)
class MyView2(View):
    @transaction.atomic
    def post(self, request): 
        # 設置事務保存點
        s1 = transaction.savepoint()   # 可以設置多個保存點
 
        # 數據庫操作。。。
 
        # 事務回滾 (如果發生異常,就回滾事務)
        transaction.savepoint_rollback(s1)  # 可以回滾到指定的保存點
 
        # 提交事務 (如果沒有異常,就提交事務)
        transaction.savepoint_commit(s1)
 
        # 返回應答
        return HttpResponse('ok')    

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • python django事務transaction源碼分析詳解
  • Django bulk_create()、update()與數據庫事務的效率對比分析
  • django中使用事務及接入支付寶支付功能
  • Django框架orM與自定義SQL語句混合事務控制操作
  • django框架事務處理小結【ORM 事務及raw sql,customize sql 事務處理】
  • 使用Python的Django框架實現事務交易管理的教程

標簽:貴州 金華 日照 陽泉 克拉瑪依 赤峰 臨汾 雙鴨山

巨人網絡通訊聲明:本文標題《解決Django transaction進行事務管理踩過的坑》,本文關鍵詞  解決,Django,transaction,進行,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解決Django transaction進行事務管理踩過的坑》相關的同類信息!
  • 本頁收集關于解決Django transaction進行事務管理踩過的坑的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美a视频在线观看| 夜夜添| 16女下面流水不遮视频网站| 18禁cos大尺度福利| 九九精品久久久久久噜噜中文| 国产性夜夜春夜夜爽30| 国产97在线视频观看| 口述3p多p的真实故事| 久热在线精品视频免费| 被爆??18禁止??视频| 毛片免费全部播放1000部| 羞羞视频无限观看| 欲皇乳魔h文| 在线观看三级网站| cjod-261波多野结衣| 51无码人妻精品1国产蜜芽| 无码国产精品一区二区色情八戒| 中国名人明星videoshd| 黄色三级毛片| 婷婷99| 色窝窝精品国产人妻在线| 嗯啊灬别停啊灬用力灬污文| 香蕉久草视频| 人人爰人人人人人鲁| 老师洗澡我随便摸她的胸| 亚洲精品乱码一品二品三品欧美 | 黑人系列h文| 一本一道波多野结衣a?v| 高清乱码?免费观看| 亚洲国产欧美精品一区二区三区| 无遮挡羞羞视频| 憋尿+被抱着C到失禁| 国产网红主播精品AV| 欲乳浪| 善良的妻子在线观看| 局长又粗又大真舒服好爽| 日本真人做爰视频大全| 男同全黄H全肉Gay片| 男人j进女的屁股视频免费| 傻白甜注定上位| 真人真事特级全黄夜看片|