[問題]Django Transaction error
各位好:
今天在做除錯時,剛好中斷點下在Transaction中,然後並沒有跑到commit或
roolback就將程式結束,之後只要再跑到那一段,要做transaction時,會造成
transaction lock,附上錯誤訊息如下:
﹝this is forbidden when an 'atomic' block is active﹞
看到此一訊息,直覺上知道DB lock,因此跑到mysql看執行序是否有異常,
但並沒有看到異常執行緒,此時沒有頭緒,一發狠將執行緒全砍掉,
但依舊還是會秀出錯誤訊息。因此想了解django Transaction 機制,
交易機制看起來並沒有控制在DB這邊,因此好奇Django是如何做到,
也想問問發生此一錯誤訊息時,該如何解救,想想很恐怖(線上會因此停擺)。
以下附上我做Transaction的程式碼:
from django.db import transaction
transaction.set_autocommit(False,using="DATABASE")
try:
with transaction.atomic(using="DATABASE"):
開始進行資料庫操作(也就是在此處將程式中斷,造成Transaction lock)
transaction.set_autocommit(True, using="DATABASE")
except:
transaction.rollback(True,using="DATABASE")
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.234.122.131
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1416402981.A.BF3.html
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 21:19:13
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 21:19:19
→
11/19 22:30, , 1F
11/19 22:30, 1F
→
11/19 22:35, , 2F
11/19 22:35, 2F
請問autocommit回不去的意思是? 我確定rollback是可以work的
記憶中,只要做roolback或commit其中一個後,整個transactioin就算完成
autocommit就會恢復
而這個錯誤會發生是因為我中斷執行,並沒有觸發到rollback或commit
造成這個錯誤後,該怎麼把他恢復?這是我好奇的地方
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 23:07:23
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 23:08:00
→
11/19 23:37, , 3F
11/19 23:37, 3F
→
11/19 23:38, , 4F
11/19 23:38, 4F
謝謝指導~ 的確寫得不夠完整~ 只是autocommit沒把他開啟,我之後下的insert
update都還是會過,真的是誤打誤撞
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 23:42:00
※ 編輯: MacPerson (36.234.122.131), 11/19/2014 23:42:34
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):