0

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

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

从 django.db 导入事务

@transaction.commit_on_success def upload_data(request): .....等等.....
obj.save()

此行出现错误希望在调用此视图之前回滚数据库 obj1.save() 如果此处出现错误,则应保存注意事项。谢谢

4

2 回答 2

0

根据Django 关于 transactions 的文档,如果您使用的是 Django 1.6,我会将整个视图包装在@transaction.atomic

from django.db import transaction

@transaction.atomic

如果您希望整个应用程序具有此行为,请ATOMIC_REQUESTS=True在您的数据库配置中进行设置,如该文档中所述。

否则,如果您在 1.5 上并且没有得到您期望的行为,您可以切换到@transaction.commit_manually,将整个视图包装在一个try块中,然后显式执行 a commit()or rollback()。它并不优雅,但如果您想要精确控制何时发生提交,它可能会起作用。

于 2013-10-31T17:17:09.940 回答
0

尝试将@transaction.commit_on_success 放在您的视图顶部。因此,如果您在该视图函数中遇到错误,它将回滚其他提交您的工作。

于 2014-01-21T19:41:08.227 回答