gpt4 book ai didi

python - 删除迁移后 makemigrations 不起作用

转载 作者:行者123 更新时间:2023-11-28 19:54:50 27 4
gpt4 key购买 nike

我错误地删除了路径 projectName/appName/migrations 下的所有 .py 文件,它包括:

0001_initial.py

0011_auto_20150918_0723.py

0002_auto_20150819_1301.py

...

现在,即使我更新了 Model 文件,并运行命令 python manage.py makemigrations,它总是提示 No changes detected .

我怎样才能恢复一切?

最佳答案

首先,即使您在生产中发生这种情况也不要 panic

当你删除所有迁移时,django 忘记了这个应用程序应该由迁移管理。 Django 默认返回旧版 python manage.py syncdb 无迁移行为,并且不会在您运行 python manage.py makemigrations

时尝试检测更改或生成新的迁移

为了让它知道迁移,您必须专门为您的应用运行命令:

python manage.py makemigrations appName

但是,对于您正在运行的应用程序,django 将无法检测到新的迁移已经应用到数据库中,并且会在您运行 python manage.py migrate 时尝试再次运行它们.

发生这种情况时,迁移会失败,提示 关系 appName.XYZ 已经存在!

为了让 django 明白你的迁移已经反射(reflect)在数据库中,你必须伪造它们:

python manage.py migrate appName --fake

这将更新迁移历史表并将您的迁移标记为已应用,但不会尝试在数据库中创建表。

更新(感谢@GwynBleiD):

这里的一个问题是,已应用的已删除迁移将列在数据库的迁移历史表中。这对于初始 python manage.py makemigrations myApp 不是问题,但是对于任何其他迁移,它会引发有关 inconsistent migration history 的错误。

为避免这种情况,您必须手动删除数据库中 django_migrations 表中引用不存在的迁移的任何行。

关于python - 删除迁移后 makemigrations 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com