首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库事务

数据库事务
EN

Stack Overflow用户
提问于 2013-10-31 17:06:44
回答 2查看 1.3K关注 0票数 0

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

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

从django.db导入事务

@transaction.commit_on_success def upload_data(请求):.等等……

obj.save()

这里出现了错误,这里需要回滚数据库,就像在此视图被称为obj1.save()之前一样,如果这里有错误,请注意应该保存。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-31 17:17:09

按照Django关于交易的文件,如果您使用Django 1.6,我会用@transaction.atomic包装整个视图

代码语言:javascript
复制
from django.db import transaction

@transaction.atomic

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

否则,如果您使用的是1.5而没有得到所期望的行为,则可以切换到@transaction.commit_manually,将整个视图封装在一个try块中,并显式地执行commit()rollback()。这并不优雅,但如果您想要对提交发生的时间进行细粒度控制,它可能会起作用。

票数 0
EN

Stack Overflow用户

发布于 2014-01-21 19:41:08

尝试将@transaction.commit_on_success放在视图的顶端。因此,如果在该视图函数中出现错误,它将回滚,否则提交您的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19712654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档