如何中止Django数据迁移?

问题描述 投票:0回答:2

我有一个数据迁移,如果发生某些情况,我实际上想回滚。

我知道迁移会自动包含在事务中,因此我只需引发异常即可安全,然后相信所有更改都会回滚。但是我应该引发哪个异常来中止我的 Django 数据迁移? 我应该写自己的例外,还是我可以接受

raise Exception('My message explaining the problem')
? 什么是最佳实践?

python django django-migrations
2个回答
2
投票

自定义异常将给出一个稍微更漂亮的消息。另一方面,迁移通常是一次性的,彼此之间或项目的其余部分基本上没有代码依赖关系,这意味着您无法重用异常类来确保每个迁移都是独立的。这里任何异常的唯一目的是提供即时反馈,因为它不会被任何东西捕获(除了生产环境中可能的错误记录......它实际上不应该失败)。

我认为缺点大于优点 - 只需提出一个简单的一次性

Exception


0
投票

正确的方法是筹集

CommandError('My message explaining the problem')
(套餐
django.core.management
)。

迁移是在命令内执行的,不同之处在于:如果使用任何其他异常类,结果将是相同的,但回溯将显示在用户的终端中,使得错误看起来像是错误的代码,但您确实故意引发异常,想要 (1) 停止代码 (2) 回滚任何更改以及 (3) 让用户知道原因,但没有理由显示回溯,因此使用

CommandError
在中止命令之前,将在没有回溯跟踪的情况下显示错误,如下所示:

CommandError: My message explaining the problem
© www.soinside.com 2019 - 2024. All rights reserved.