【发布时间】:2011-11-23 00:23:49
【问题描述】:
从my previous question 开始,我正在使用带有 InnoDB 引擎的 MySQL,并设置了一个简单的测试表。当我运行以下代码时:
c.execute("""insert into test(text) values('test1')""")
conn.commit()
c.execute("""insert into test(text) values('test2')""")
# Raise an exception to simulate an error
raise Exception('spam', 'eggs')
c.execute("""insert into test(text) values('test3')""")
conn.commit()
正如预期的那样,我在数据库中看到一个仅针对 test1 的条目。
在Django中创建相关模型类并运行等效代码后,(我在settings.py中指定了TransactionMiddleware):
def transaction_test(request):
t1 = Test(text='test1')
t2 = Test(text='test2')
t1.save()
# Raise an exception to simulate an error
raise Exception('spam', 'eggs')
t2.save()
return render_to_response('index.html')
然后我仍然在表中看到“test1”的条目,而根据 TransactionMiddleware 文档中给出的描述,我预计整个事务都会回滚,包括“test1”的保存
还有其他人看过吗?我还缺少其他 Django 设置吗?
【问题讨论】:
-
你从哪里开始交易?
标签: django transactions rollback