2013-10-31 114 views
0

我有一个读取Excel表格并保存数据的视图。如果在该视图中发生任何错误(500),我需要一种方式数据库事务不应该提交,因此它们应该回滚。数据库事务

我使用下面的代码,但它会在出现错误之前保存数据。我的任务是如果数据库应该回滚视图中有任何错误。

从django.db进口交易

@ transaction.commit_on_success 高清upload_data(请求): .....等等.....
obj.save()

错误来自这一行 想要回滚数据库,因为它 之前这个视图被称为 obj1.save() 如果错误在这里注意应该保存。 感谢

+0

您使用的是什么版本的Django? –

+0

我正在使用Django 1.5 – user734353

回答

0

Django's documentation on transactions,如果你使用Django 1.6,我想整个包住鉴于@transaction.atomic

from django.db import transaction 

@transaction.atomic 

如果你想这种行为为您的整个应用程序,在您的数据库配置设置ATOMIC_REQUESTS=True ,如该文档中所述。

否则,如果你是在1.5和没有得到你所期望的行为,你可以切换到@transaction.commit_manually,包裹在try块的整体视图,并做了commit()rollback()明确。它并不优雅,但如果您想要精确控制何时完成提交,它可能会工作。

+0

我正在使用Mysql,我也试过你的方法。但它不起作用。我也尝试除了块每个保存对象 – user734353

0

尝试将@ transaction.commit_on_success放在您视图的顶部。所以,如果你在该视图函数中出现错误,它会回滚其他的提交你的工作。