Django之ORM中事務和鎖

2022-05-15 15:17:04 字數 2564 閱讀 1906

orm

事務:

資料庫事務(簡稱:事務)是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。

並非任意的對資料庫的操作序列都是資料庫事務。資料庫事務擁有以下四個特性,習慣上被稱之為acid特性。

1.原子性(atomicity):事務作為乙個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。

2.一致性(consistency):事務應確保資料庫的狀態從乙個一致狀態轉變為另乙個一致狀態。一致狀態的含義是資料庫中的資料應滿足完整性約束。

3.隔離性(isolation):多個事務併發執行時,乙個事務的執行不應影響其他事務的執行。

4.永續性(durability):已被提交的事務對資料庫的修改應該永久儲存在資料庫中。

全域性開啟(中介軟體):

settings.

py檔案配置:

databases =    #

設定資料庫的嚴格模式

'atomic_requests':true,#

全域性開啟事務,繫結的是

請求相應的整個過程

# "autocommit":false, #

全域性取消自動提交,慎用

# 'other':

}

}全域性開啟事務的方式是將任意乙個http請求對應的所有sql都放在乙個事務中執行(要麼所有都成功,要麼所有都失敗)。是全域性性的配置, 如果要對某個http請求放水(然後自定義事務),可以用non_atomic_requests修飾器,那麼他就不受事務的管控了。

fromdjango.dbimporttransaction

#

全域性開啟事務,取消某些事務:

@transaction.non_atomic_requests

defquery(request):

#....orm

相關操作

returnhttpresponse('全域性開啟事務,指定本檢視函式取消事務')

但是django 文件中說,不推薦這麼做。因為如果將事務跟http 請求繫結到一起的時,然而view 是依賴於應用程式對資料庫的查詢語句效率和資料庫當前的鎖競爭情況。當流量上來的時候,效能會有影響。

區域性開啟事務(兩種方式):

第一種:使用裝飾器@transcation.atomic裝飾檢視函式區域性開啟事務

fromdjango.dbimporttransaction

@transaction.atomic

definsert(request):

#...orm

相關操作

returnhttpresponse('使用裝飾器區域性開啟事務')

第二種:上下文管理with trancation.atomic():…針對性的區域性開啟事務

fromdjango.dbimporttransaction

defdelete(request):

#...

withtransaction.atomic():

#...orm

相關操作

#...

returnhttpresponse('使用上下文進行區域性開啟事務')

django中ORM的事務操作

在django的orm中,有兩種使用事務的方式 注意,mysql需要是innodb引擎 from django.db import transaction transaction.atomic def viewfunc request 下面的 在乙個事務中執行,一但出現異常,整個函式中所有的資料庫操...

Django之ORM資料對映

資料對映在django中的應用 1 一對一關係 models.onetoonefield 相當於唯 一 外來鍵 2 一對多關係 models.foreignkey 3 多對多關係 models.manytomanyfield 相當於關聯表中建立兩個唯一外來鍵關聯 比如有書 描述表 出版社 作者這4張...

Django 中ORM 的使用

1 手動新建乙個資料庫 2 告訴django連線哪個資料庫 settings.py裡配置資料庫連線資訊 資料庫相關的配置項 databases 3 告訴django用pymsql 模組代替預設的mysqldb 去連線mysql 在和settings.py 同目錄下的 init py檔案中做配置 im...