我有一个视图,它读取excel表并保存数据。我需要一种方法,如果在那个视图中发生任何错误(500),数据库事务不应该提交,因此它们应该回滚。
我使用以下代码,但它在出现错误之前保存数据。我的任务是,如果视图中有任何错误,数据库应该回滚。
从django.db导入事务
@transaction.commit_on_success def upload_data(请求):.等等……
obj.save()
这里出现了错误,这里需要回滚数据库,就像在此视图被称为obj1.save()之前一样,如果这里有错误,请注意应该保存。谢谢
发布于 2013-10-31 17:17:09
按照Django关于交易的文件,如果您使用Django 1.6,我会用@transaction.atomic包装整个视图
from django.db import transaction
@transaction.atomic如果您希望整个应用程序都有此行为,请在数据库配置中设置ATOMIC_REQUESTS=True,如该文档所述。
否则,如果您使用的是1.5而没有得到所期望的行为,则可以切换到@transaction.commit_manually,将整个视图封装在一个try块中,并显式地执行commit()或rollback()。这并不优雅,但如果您想要对提交发生的时间进行细粒度控制,它可能会起作用。
发布于 2014-01-21 19:41:08
尝试将@transaction.commit_on_success放在视图的顶端。因此,如果在该视图函数中出现错误,它将回滚,否则提交您的工作。
https://stackoverflow.com/questions/19712654
复制相似问题