亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

django框架事務(wù)處理小結(jié)【ORM 事務(wù)及raw sql,customize sql 事務(wù)處理】

 更新時間:2019年06月27日 10:56:40   作者:輕舞肥羊  
這篇文章主要介紹了django框架事務(wù)處理,結(jié)合實例形式總結(jié)分析了使用ORM 事務(wù)及raw sql,customize sql 事務(wù)處理相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下

本文實例講述了django框架事務(wù)處理。分享給大家供大家參考,具體如下:

django 中要求事務(wù)處理的情況有兩種:

1.基于django orM 的 transaction 處理

2.是基于自定義SQL 語句的transaction的處理,通常是比較復(fù)雜的SQL ,用ORM 處理不方便的時候用的。或者是大批量SQL語句執(zhí)行,比較在意效率的情況下用。

首先說一下第二種情況,因為這種情況相對簡單一點,沒ORM 那么多東西,用我寫的一個方法來解釋

from django.db import connection, transaction
.....
def batch_execsql(sqlarray):
  cursor = connection.cursor() # 得到處理的游標對象
  ret=""
  try:
    for sql in sqlarray:
      cursor.execute(sql)
    transaction.commit_unless_managed() # 這是重點,沒有這條語句,就不會commit 。
  except Exception,e: #簡單的異常處理,可以忽略
    ret=str(e)
  cursor.close()
  return ret #有異常則返回異常,否則返回為空字符串

由上面可以看出 transaction.commit_unless_managed()的重要性,這是自定義SQL 語句情況下處理事務(wù)的方法. 上面的例子中的 sqlarray 表示一個list,里面有很多自己寫的SQL 語句,而這些語句要求在一個事務(wù)中完成。

再來看看第一種情況,用ORM 的時候,事務(wù)的處理. 這在django 的官方文檔中有說明,下面簡單翻譯介紹下

1. django 默認的事務(wù), 是自動處理的,當你在調(diào)用 orM 的model.save(),model.delete()的時候,所有改動會被立即提交的,相當于數(shù)據(jù)庫設(shè)置了auto commit,沒有隱藏的rollback.

2.對http請求的事務(wù)攔截,這是推薦的方式,使用了transaction中間件來完成,這是比較好的方法,但必須在settings.py中配置.

MIDDLEWARE_CLASSES = (
  'django.middleware.cache.UpdateCacheMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.transaction.TransactionMiddleware',
  'django.middleware.cache.FetchFromCacheMiddleware',
)

但需要注意的是,這樣配置之后,與你中間件的配置順序是有很大關(guān)系的。在 TransactionMiddleware 之后的所有中間件都會受到事務(wù)的控制。所以當你把session 中間件放到 Transaction之后,同樣會受到影響。但  CacheMiddleware, UpdateCacheMiddleware, and FetchFromCacheMiddleware  不會受到影響,cache機制有自己的處理方式,用了內(nèi)部的connection來處理

另外 TransactionMiddleware 只對 default 的數(shù)據(jù)庫配置有效,如果要對另外的數(shù)據(jù)連接用這種方式,必須自己實現(xiàn)中間件。

3.自己來控制事務(wù),這種情況下,你自己靈活控制事務(wù).在settings.py 中不用配置 TransactionMiddleware 中間件了, 基本采用裝飾模式來實現(xiàn)。

a) @transaction.autocommit ,django默認的事務(wù)處理, 采用此裝飾模式會忽略掉全局的transaction 設(shè)置

from django.db import transaction
@transaction.autocommit
def viewfunc(request):
  ....
@transaction.autocommit(using="my_other_database")
def viewfunc2(request):
  ....

b) @transaction.commit_on_success 在一個方法中,所有工作完成后,提交事務(wù)。

from django.db import transaction
@transaction.commit_on_success
def viewfunc(request):
  ....
@transaction.commit_on_success(using="my_other_database")
def viewfunc2(request):
  ....

c) commit_manually() ,完全自己處理,但如果你沒有調(diào)用commit()或者rollback(),將會拋出TransactionManagementError 異常.

from django.db import transaction
@transaction.commit_manually
def viewfunc(request):
  ...
  # You can commit/rollback however and whenever you want
  transaction.commit()
  ...
  # But you've got to remember to do it yourself!
  try:
    ...
  except:
    transaction.rollback()
  else:
    transaction.commit()
@transaction.commit_manually(using="my_other_database")
def viewfunc2(request):
  ....

希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python實現(xiàn)一個數(shù)組除以一個數(shù)的例子

    Python實現(xiàn)一個數(shù)組除以一個數(shù)的例子

    今天小編就為大家分享一篇Python實現(xiàn)一個數(shù)組除以一個數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 分享4個Python中的非常好用的自動化腳本

    分享4個Python中的非常好用的自動化腳本

    這篇文章為大家準備了4個很棒的Python自動化腳本,可以解決這些問題。文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-11-11
  • 利用Python代碼實現(xiàn)模擬動態(tài)指針時鐘

    利用Python代碼實現(xiàn)模擬動態(tài)指針時鐘

    這篇文章主要為大家詳細介紹了如何利用python和C++代碼實現(xiàn)模擬動態(tài)指針時鐘,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • Opencv中cv2.cvtColor彩色圖轉(zhuǎn)灰度圖的其他6種方法

    Opencv中cv2.cvtColor彩色圖轉(zhuǎn)灰度圖的其他6種方法

    本文主要介紹了Opencv中cv2.cvtColor彩色圖轉(zhuǎn)灰度圖的其他6種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Python如何實現(xiàn)的簡單購物車程序

    Python如何實現(xiàn)的簡單購物車程序

    這篇文章主要介紹了Python如何實現(xiàn)的簡單購物車程序,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • 關(guān)于numpy數(shù)組中元素單個選取或部分選取問題

    關(guān)于numpy數(shù)組中元素單個選取或部分選取問題

    這篇文章主要介紹了關(guān)于numpy數(shù)組中元素單個選取或部分選取問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • python 判斷自定義對象類型

    python 判斷自定義對象類型

    python 判斷自定義對象類型 判斷內(nèi)建的類型可以用type。
    2009-03-03
  • python的鏈表基礎(chǔ)知識點

    python的鏈表基礎(chǔ)知識點

    在本篇文章里小編給大家整理的是一篇關(guān)于python的鏈表基礎(chǔ)知識點內(nèi)容,有興趣的朋友們可以參考學(xué)習(xí)下。
    2020-09-09
  • Python數(shù)據(jù)類型詳解(三)元祖:tuple

    Python數(shù)據(jù)類型詳解(三)元祖:tuple

    本文給大家介紹的是Python數(shù)據(jù)類型中的元祖(tuple),簡單的說Tuple,與列表一樣,元素也是不可變的,但與列表不同,在一個元祖可以包含不同類型的元素
    2016-05-05
  • Django xadmin安裝及使用詳解

    Django xadmin安裝及使用詳解

    這篇文章主要介紹了Django xadmin安裝及使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論