各位好:
今天在做除錯時,剛好中斷點下在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")
謝謝各位