日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0數(shù)據(jù)庫(kù)事務(wù)-底層API

自動(dòng)提交

Django 在 ?django.db.transaction? 模塊中提供了一個(gè) API 來(lái)管理每個(gè)數(shù)據(jù)庫(kù)連接的自動(dòng)提交狀態(tài)。

創(chuàng)新互聯(lián)建站專注于網(wǎng)站建設(shè),為客戶提供成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)開(kāi)發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開(kāi)發(fā),成都品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。

get_autocommit(using=None)

set_autocommit(autocommit, using=None)

這些函數(shù)使接受一個(gè) ?using ?參數(shù)表示所要操作的數(shù)據(jù)庫(kù)。如果未提供,則 Django 使用 "?default?" 數(shù)據(jù)庫(kù)。
自動(dòng)提交默認(rèn)為開(kāi)啟,如果你將它關(guān)閉,自己承擔(dān)后果。
一旦你關(guān)閉了自動(dòng)提交, Django 將無(wú)法幫助你,數(shù)據(jù)庫(kù)將會(huì)按照你使用的數(shù)據(jù)庫(kù)適配器的默認(rèn)行為進(jìn)行操作。
在關(guān)閉自動(dòng)提交之前,你必須確保當(dāng)前沒(méi)有活動(dòng)的事務(wù),通常你可以執(zhí)行 ?commit()? 或者 ?rollback()? 函數(shù)以達(dá)到該條件。
當(dāng)一個(gè)原子 ?atomic()? 事務(wù)處于活動(dòng)狀態(tài)時(shí), Django 將會(huì)拒絕關(guān)閉自動(dòng)提交的請(qǐng)求,因?yàn)檫@樣會(huì)破壞原子性。

事務(wù)

事務(wù)是指具有原子性的一系列數(shù)據(jù)庫(kù)操作。即使你的程序崩潰,數(shù)據(jù)庫(kù)也會(huì)確保這些操作要么全部完成要么全部都未執(zhí)行。

Django 不提供啟動(dòng)事務(wù)的 API。 啟動(dòng)事務(wù)的預(yù)期方法是使用 ?set_autocommit()? 禁用自動(dòng)提交。

進(jìn)入事務(wù)后,你可以選擇在 ?commit()? 之前應(yīng)用執(zhí)行的更改,或者使用 ?rollback()? 取消它們。這些函數(shù)在 ?django.db.transaction? 中定義。

commit(using=None)

rollback(using=None)

這些函數(shù)使接受一個(gè) ?using ?參數(shù)表示所要操作的數(shù)據(jù)庫(kù)。如果未提供,則 Django 使用 "?default?" 數(shù)據(jù)庫(kù)。
當(dāng)一個(gè)原子 ?atomic()? 事務(wù)處于活動(dòng)狀態(tài)時(shí), Django 將會(huì)拒絕進(jìn)行事務(wù)提交或者事務(wù)回滾,因?yàn)檫@樣會(huì)破壞原子性。

保存點(diǎn)

保存點(diǎn)在事務(wù)中是標(biāo)記物,它可以使得回滾部分事務(wù),而不是所有事務(wù)。 SQLite, PostgreSQL, Oracle, 和 MySQL (當(dāng)使用 InnoDB 存儲(chǔ)引擎) 后端提供了保存點(diǎn)。其他后端提供了保存點(diǎn)函數(shù),但它們是空操作——它們實(shí)際上沒(méi)有做任何事情。
如果你正在使用 Django 的默認(rèn)行為——自動(dòng)提交,保存點(diǎn)并不特別有用。盡管,一旦你用 ?atomic() ?打開(kāi)了一個(gè)事務(wù),那么需要構(gòu)建一系列的等待提交或回滾的數(shù)據(jù)庫(kù)操作。如果發(fā)出回滾,那么會(huì)回滾整個(gè)事務(wù)。保存點(diǎn)有能力執(zhí)行顆粒度級(jí)別的回滾,而不是由 ?transaction.rollback()? 執(zhí)行的完全回滾。
當(dāng)嵌套了 ?atomic()? 裝飾器,它會(huì)創(chuàng)建一個(gè)保存點(diǎn)來(lái)允許部分提交或回滾。強(qiáng)烈推薦只使用 ?atomic()? 而不是下面描述的函數(shù),但它們?nèi)匀皇枪?API 的一部分,而且沒(méi)計(jì)劃要棄用它們。
這里的每一個(gè)函數(shù)使用 ?using ?參數(shù),這個(gè)參數(shù)為應(yīng)用的數(shù)據(jù)庫(kù)名。如果沒(méi)有 ?using ?參數(shù),那么會(huì)使用 "?default?" 數(shù)據(jù)庫(kù)。
保存點(diǎn)由 ?django.db.transaction?中的三個(gè)函數(shù)來(lái)控制:

savepoint(using=None)

創(chuàng)建新的保存點(diǎn)。這標(biāo)志著事務(wù)中已知處于“良好”狀態(tài)的一個(gè)點(diǎn)。返回保存點(diǎn)ID (?sid?) 。

savepoint_commit(sid, using=None)

釋放保存點(diǎn) ?sid ?。自保存點(diǎn)被創(chuàng)建依賴執(zhí)行的更改成為事務(wù)的一部分。

savepoint_rollback(sid, using=None)

回滾事務(wù)來(lái)保存 ?sid ?。

如果不支持保存點(diǎn)或數(shù)據(jù)庫(kù)在自動(dòng)模式時(shí),這些函數(shù)不執(zhí)行操作。

另外,還有一個(gè)實(shí)用功能:

clean_savepoints(using=None)

重置用于生成唯一保存點(diǎn)ID的計(jì)數(shù)器。

下面的例子演示保存點(diǎn)的用法:

from django.db import transaction

# open a transaction
@transaction.atomic
def viewfunc(request):

    a.save()
    # transaction now contains a.save()

    sid = transaction.savepoint()

    b.save()
    # transaction now contains a.save() and b.save()

    if want_to_keep_b:
        transaction.savepoint_commit(sid)
        # open transaction still contains a.save() and b.save()
    else:
        transaction.savepoint_rollback(sid)
        # open transaction now contains only a.save()

保存點(diǎn)可能通過(guò)執(zhí)行部分回滾來(lái)恢復(fù)數(shù)據(jù)庫(kù)錯(cuò)誤。如果你在 ?atomic()? 塊中執(zhí)行此操作,那么整個(gè)塊將仍然被回滾,因?yàn)樗恢滥阋呀?jīng)處理了較低級(jí)別的情況。為了防止發(fā)生,你可以使用下面的函數(shù)控制回滾行為。

get_rollback(using=None)

set_rollback(rollback, using=None)

當(dāng)存在內(nèi)部原子塊時(shí),設(shè)置回滾標(biāo)記為 ?True ?將強(qiáng)制回滾。這對(duì)于觸發(fā)回滾而不引發(fā)異??赡芎苡杏谩?br />將它設(shè)置為 ?False ?會(huì)防止這樣的回滾。在這樣做之前,確保你已經(jīng)將事務(wù)回滾到當(dāng)前原子塊中一個(gè)正常的保存點(diǎn)。否則你會(huì)破壞原子性并且可能發(fā)生數(shù)據(jù)損壞。


網(wǎng)站欄目:創(chuàng)新互聯(lián)Django4.0教程:Django4.0數(shù)據(jù)庫(kù)事務(wù)-底層API
當(dāng)前地址:http://www.dlmjj.cn/article/djcchoe.html