如何对偏离相应模型的数据库进行初始迁移?

时间:2018-08-29 23:39:33

标签: django

情况:我正在从事的项目的文件损坏或其他原因。模型是最新版本,但是必须在添加/删除/修改某些列之前回滚SQLite DB。迁移文件都消失了。尝试重新创建迁移会导致新的列出现在初始迁移文件中,因此我既不能进行真实迁移(由于存在表),也无法进行伪造(因为数据库中缺少这些列)。

在这种情况下,如何进行初始迁移以匹配数据库中当前存在的列,以便我可以对其进行伪造,然后进行真正的第二次迁移以使表与模型一致?想到的唯一一件事就是手动调整模型以匹配数据库模式,进行初始迁移,伪造它,然后还原新版本的模型,但是我更喜欢自动完成。

1 个答案:

答案 0 :(得分:1)

django inpsectdb来营救。

但是首先,如果您使用了正确的版本控制,请学习如何使用git,现在您将不会遇到这个困难。

  1. 第一步,将代码添加到版本控制中。

  2. 删除现有模型文件

  3. 使用inspectdb从数据库中的表中生成一个models.py。这不是完美的,您必须手动编辑文件,并且可能必须手动将其散布在不同模型文件之间。

  4. 现在删除迁移表的内容

  5. 执行./manage.py makemigrations(yourapp)

  6. 进行您提到的虚假迁移

  7. 将生成的models.py替换为当前的models.py(对该文件进行git checkout可以很好地完成技巧)

  8. 进行一次迁移,然后再次迁移。

祝你好运。