Django - 将数据传输到新数据库

Django - Transferring data to a new database

我使用 Django 作为我的 web 框架和 Django REST API。一次又一次,当我尝试在生产环境中迁移 table 时,我遇到了一连串的错误。我相信我的开发迁移与生产不同步,结果是混乱。因此,每次我尝试在生产环境中进行主要迁移时,我最终都需要使用核选项——删除所有迁移,如果失败,则核对数据库。 (甚至应该提交迁移吗?)

然而这一次,我有太多数据无法丢失。我想保留数据。我想用新模式构建一个新数据库,然后手动将旧数据库转移到新数据库。我不确定该怎么做。有没有人有什么建议?此外,我怎样才能防止这种情况在未来发生?

根据您的说法,听起来您的迁移文件不正常,并且您经常 运行 陷入与数据库迁移相关的问题。我建议您只删除所有迁移文件并开始新的初始迁移您进行所有必要的模型更改和架构重构之后。

当需要在您的生产服务器上进行迁移时,--fake-initial 并在 Django 外部手动更改数据库以使其与您的模式匹配可能最有意义。

我可能会对此产生强烈反对,显然会使用你的最佳判断,但根据我的经验,以这种方式解决这个问题要容易得多,而不是浪费时间制作试图修复所有问题的自定义迁移文件你的问题。


解决您的其他问题

Time and time again, when I try to migrate the table on production, I get a litany of errors.

我强烈建议您花时间在 reading the official Django docs 之前熟悉如何进行迁移,这样您会省去很多麻烦。

... each time I attempt major migrations on production I end up needing to use the nuclear option - delete all migrations

您不应该在每次出现问题时都删除迁移文件。

Are migrations even supposed to be committed?

您绝对应该提交迁移。如果您在团队中工作,他们将使用您创建的迁移文件在他们的本地数据库以及您可能拥有的任何 dev/prod 服务器上进行必要的更改。