【问题标题】:What is the command to force all migrations in Django?在 Django 中强制所有迁移的命令是什么?
【发布时间】:2023-10-01 15:02:02
【问题描述】:

我切换了数据库名称,现在我的 Django 模型与我的数据库表不同步。强制 Django 执行所有迁移以同步模型和表的命令是什么?我不想 manage.py migrate --fake。

【问题讨论】:

  • 要运行所有迁移,您需要 python manage.py migrate。但我不明白你现在的情况。你改变了database names 这是否意味着你改变了你的数据库?如果你切换到另一个数据库,你不应该有任何表,不是吗?为什么需要强制?
  • 我切换到的数据库中确实有表,但它们略有不同;它们对应于早期版本的 Django 模型。
  • 然后您需要--fake 到与您当前数据库匹配的确切迁移,并应用所有其他迁移。您可以使用manage.py migrate <app_name> <migration_name> 迁移到特定迁移。但是,当您搞砸时,迁移并不是修复数据库的神奇工具。

标签: django database-migration


【解决方案1】:

我通过手动删除所有迁移并再次运行 makemigrations 以获取新的初始迁移文件来解决此问题。然后,我进入我的数据库并手动删除了 Django 在应用程序中创建的所有表。最后,我删除了 django.migrations 表中包含应用程序名称的所有行。毕竟,我运行了 manage.py migrate 并且数据库是同步的。

【讨论】:

    【解决方案2】:

    当您更改模型中的某些内容时,您必须执行:

    python manage.py makemigrations
    

    用于创建模型的新更改架构。那么:

    python manage.py migrate <app_name> 
    

    【讨论】:

      最近更新 更多