作者MacPerson (Gary)
看板Python
標題Re: [問題]Django Transaction error
時間Fri Nov 21 22:48:46 2014
大家好:
回頭來分享,這個issue的解決辦法。
在StackOverFlow,有找到一篇關於這個issue的解法以及說明:
http://ppt.cc/sX6l
只是這個問題的發生,還是個謎(太嫩了),根據同事轉述,他也在Trasaction中除錯,
直接關閉程式,不下幾十次,也沒有弄出種錯誤。
為了找出錯誤怎麼發生,我把DB重開,執行後,錯誤一樣發生,cookie清掉,錯誤
一樣發生,那一段跑進去後,就是會發生錯誤(如同上篇所述),追進Traceback,
追到這段
def validate_no_atomic_block(self):
"""
Raise an error if an atomic block is active.
"""
if self.in_atomic_block:
raise TransactionManagementError(
"This is forbidden when an 'atomic' block is active.")
那目前還是照StackOverFlow這篇來解掉這個issue,寫法跟我上篇差不多,
但是把set_auotcommit相關的語法都拿掉,但拿掉後有個隱憂是目前Django預設
autocommit=true,在沒有下autocommit=false,情況下進行transactation,
不知道會不會因為autocommit的關係,造成transaction失效,今天稍微
測了一下是OK的,如果有意外在上來跟各位分享。
也謝謝uranusjr的指教~
再貼一篇Transaction官方文章,給遇到相同問題的鄉民參考
http://ppt.cc/bW7Y
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.57.225
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1416581329.A.6EC.html
※ 編輯: MacPerson (122.118.57.225), 11/21/2014 22:51:19
※ 編輯: MacPerson (122.118.57.225), 11/21/2014 22:51:57
→ uranusjr: 既然都追源碼了, 可以去看看 atomic 的實作, 裡面註解很 11/21 22:59
→ uranusjr: 詳細, 看完應該就會放心 11/21 22:59
→ uranusjr: 說不定還可以解答你的資料庫究竟發生什麼事了 11/21 23:00
※ 編輯: MacPerson (122.118.57.225), 11/21/2014 23:36:20