删除迁移后makemigrations不起作用

2024-05-08 15:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

0001_initial.py

0011_auto_20150918_0723.py

0002_auto_20150819_1301.py

...

现在,即使我更新了模型文件,并运行命令python manage.py makemigrations,它总是提示没有检测到任何更改。在

我怎样才能找回一切?在


Tags: 文件py模型命令路径automanagemigrations
1条回答
网友
1楼 · 发布于 2024-05-08 15:07:00

首先,即使在生产中发生这种情况,也不要惊慌。在

当您删除了所有迁移时,django忘记了这个应用程序应该由migrations管理。Django默认返回到传统的python manage.py syncdb无迁移行为,并且在运行python manage.py makemigrations时不会尝试检测更改或生成新的迁移

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

python manage.py makemigrations appName

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

当这种情况发生时,迁移失败,说明relation appName.XYZ already exists!。在

为了让django明白您的迁移已经反映在数据库中,您必须伪造它们:

^{pr2}$

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

更新(感谢@GwynBleiD):

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

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

相关问题 更多 >