如果我使用 Django South 运行迁移并且它崩溃了,我的数据库是不是曾经损坏?

Posted

技术标签:

【中文标题】如果我使用 Django South 运行迁移并且它崩溃了,我的数据库是不是曾经损坏?【英文标题】:If I run a migration with Django South and it crashes, is my database ever corrupted?如果我使用 Django South 运行迁移并且它崩溃了,我的数据库是否曾经损坏? 【发布时间】:2012-04-02 14:08:39 【问题描述】:

我正在玩 Django South,它的强大功能给我留下了深刻的印象,但是在进行一些迁移的过程中,我设法做了一些在迁移过程中导致错误的事情。诸如在数据迁移文件中出现语法错误或运行时异常、决定我不想实际做某事以及在迁移期间按 ctrl-c 并过早中止等。

我使用 mysql 作为数据库后端。当 South 出现问题时,我是否需要担心数据库的完整性?事务是否确保所有问题都在出错时回滚?

【问题讨论】:

1) 它使用事务吗? 2) 这些事务是否涵盖 MySQL 中的 DDL 语句? 我的数据库上的存储方式是InnoDB,支持事务。从我的谷歌搜索来看,InnoDB 的事务似乎并未涵盖 DDL 语句。所以我想这意味着将涵盖数据迁移,但不会涵盖架构迁移?似乎架构迁移更容易在第一次完成,因为系统可以自动完成大部分迁移。 【参考方案1】:

数据库应该很好地回滚:

http://south.aeracode.org/docs/migrationstructure.html#transactions

不管怎样,你不能只检查数据库表吗?

几点说明:

您可以打印现有的迁移

manage.py 迁移 --list

这也显示了已应用的迁移

您还可以使用

手动回滚到以前的迁移

manage.py 迁移 0010

其中 10 是最后一次安全迁移

希望对你有帮助

【讨论】:

"不管怎样,你不能只检查数据库表吗?" - 在我的开发数据库上并不重要,但如果我要在生产数据库上使用它,我想确保它不会损坏。我想这就是为什么你不会在开发数据库上测试它之前在生产数据库上尝试它的原因。

以上是关于如果我使用 Django South 运行迁移并且它崩溃了,我的数据库是不是曾经损坏?的主要内容,如果未能解决你的问题,请参考以下文章

不知道为啥 django South 试图运行反向迁移

运行单元测试时禁用 Django South?

South - 将 django 应用程序从 sqlite 迁移到 mysql

Django South:为多个应用程序创建架构迁移

Django 迁移——是不是可以在项目中间使用 South?

从 South 迁移到 Django 1.7 迁移:可交换依赖项