[问题]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