日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0數(shù)據(jù)庫事務-特定于數(shù)據(jù)的注釋

SQLite 中的保存點

雖然 SQLite 支持保存點時,但 sqlite3 模塊中的一個設計缺陷使得它們幾乎無法使用。
當啟用自動提交時,保存點沒有意義。當關閉時,sqlite3 會在保存點語句之前隱式提交。(事實上,它會在除了 ?SELECT?, ?INSERT?, ?UPDATE?, ?DELETE和?REPLACE ?之前的任何語句之前提交)這個 Bug 有兩個后果:

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產品對外擴展宣傳的重要窗口,一個合格的網站不僅僅能為公司帶來巨大的互聯(lián)網上的收集和信息發(fā)布平臺,創(chuàng)新互聯(lián)公司面向各種領域:成都葡萄架成都網站設計、營銷型網站建設解決方案、網站設計等建站排名服務。


  • 保存點的底層API只能在事務中可用,即在 ?atomic()? 塊中。
  • 當關閉自動提交時,不能使用 ?atomic()? 。

MySQL 中的事務

如果你正在使用 MySQL,表可能支持或不支持事務;它取決于 MySQL 版本和表的類型。(表類型是指 "InnoDB" 或 "MyISAM" 之類的東西)MySQL 事務的特性超出了本文的范圍,但 MySQL 站點有 MySQL 事務的相關信息。

如果 MySQL 安裝時沒有支持事務,然后 Django 將始終在自動提交模式中運行:語句將在它們調用的時候被執(zhí)行和提交。如果 MySQL 安裝時支持了事務,Django 將像本文說的那樣處理事務。

處理 PostgreSQL 事務中的異常

注解:只有在實現(xiàn)自有的事務管理時,這部分才有用。這個問題不會發(fā)生在 Django 默認模式里,并且 ?atomic()?會自動處理它。

在一個事務里,當對 PostgreSQL 游標的調用引發(fā)了異常(通常是 ??IntegrityError??),在同一事務中的隨后的SQL 將會出現(xiàn) "?current transaction is aborted, queries ignored until end of transaction block?" 的錯誤 。雖然 ?save()? 的基本用法不太可能在 PostgreSQL 中引發(fā)異常,但還有更高級的用法模式,比如保存具有唯一字段的對象,保存使用?force_insert/force_update? 標記,或調用自定義的 SQL。

有幾種方法來從這種錯誤中恢復。

事務回滾

第一個選項是回滾整個事務。比如:

a.save() # Succeeds, but may be undone by transaction rollback
try:
    b.save() # Could throw exception
except IntegrityError:
    transaction.rollback()
c.save() # Succeeds, but a.save() may have been undone

調用 ?transaction.rollback()? 回滾整個事務。任何未提交的數(shù)據(jù)庫操作會被丟棄。在這個例子里, ?a.save()? 做的改變會丟失,即使操作本身沒有引發(fā)錯誤。

保存點回滾

你可以使用 ?savepoints來控制回滾的程度。執(zhí)行可能失敗的數(shù)據(jù)庫操作之前,你可以設置或更新保存點;這樣,如果操作失敗,你可以回滾單一的錯誤操作,而不是回滾整個事務。比如:

a.save() # Succeeds, and never undone by savepoint rollback
sid = transaction.savepoint()
try:
    b.save() # Could throw exception
    transaction.savepoint_commit(sid)
except IntegrityError:
    transaction.savepoint_rollback(sid)
c.save() # Succeeds, and a.save() is never undone

在這個例子里, ?a.save()? 將不會在 ?b.save()? 引發(fā)異常的情況下被撤銷。


網頁題目:創(chuàng)新互聯(lián)Django4.0教程:Django4.0數(shù)據(jù)庫事務-特定于數(shù)據(jù)的注釋
文章出自:http://m.5511xx.com/article/dhdodge.html