[問題]Django Transaction error

作者: MacPerson (Gary)   2014-11-19 21:16:19
各位好:
今天在做除錯時,剛好中斷點下在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")
謝謝各位
作者: uranusjr (←這人是超級笨蛋)   2014-11-19 22:30:00
沒有 traceback, 做了什麼資料庫操作也不說, 只能通靈了BTW 你的程式邏輯不對, 如果出錯 autocommit 回不去誰和你說 rollback/commit 後 autocommit 會自己回來的至少文件看一下嘛, 不要自己在那裡用直覺猜

Links booklink

Contact Us: admin [ a t ] ucptt.com