作者MacPerson (Gary)
看板Python
标题[问题]Django Transaction error
时间Wed Nov 19 21:16:19 2014
各位好:
今天在做除错时,刚好中断点下在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://webptt.com/cn.aspx?n=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
1F:→ uranusjr: 没有 traceback, 做了什麽资料库操作也不说, 只能通灵了 11/19 22:30
2F:→ uranusjr: BTW 你的程式逻辑不对, 如果出错 autocommit 回不去 11/19 22:35
请问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
3F:→ uranusjr: 谁和你说 rollback/commit 後 autocommit 会自己回来的 11/19 23:37
4F:→ uranusjr: 至少文件看一下嘛, 不要自己在那里用直觉猜 11/19 23:38
谢谢指导~ 的确写得不够完整~ 只是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