[問題]Django Transaction error

看板Python作者 (Gary)時間9年前 (2014/11/19 21:16), 9年前編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/2 (看更多)
各位好: 今天在做除錯時,剛好中斷點下在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
沒有 traceback, 做了什麼資料庫操作也不說, 只能通靈了
11/19 22:30, 1F

11/19 22:35, , 2F
BTW 你的程式邏輯不對, 如果出錯 autocommit 回不去
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
誰和你說 rollback/commit 後 autocommit 會自己回來的
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
文章代碼(AID): #1KR9Wblp (Python)
文章代碼(AID): #1KR9Wblp (Python)