2024-05-08 15:07:00 发布
网友
我错误地删除了路径projectName/appName/migrations下的所有.py文件,包括:
0001_initial.py 0011_auto_20150918_0723.py 0002_auto_20150819_1301.py...
0001_initial.py
0011_auto_20150918_0723.py
0002_auto_20150819_1301.py
...
现在,即使我更新了模型文件,并运行命令python manage.py makemigrations,它总是提示没有检测到任何更改。在
python manage.py makemigrations
我怎样才能找回一切?在
首先,即使在生产中发生这种情况,也不要惊慌。在
当您删除了所有迁移时,django忘记了这个应用程序应该由migrations管理。Django默认返回到传统的python manage.py syncdb无迁移行为,并且在运行python manage.py makemigrations时不会尝试检测更改或生成新的迁移
python manage.py syncdb
为了让它知道迁移,您必须专门为您的应用程序运行命令:
python manage.py makemigrations appName
但是,对于正在运行的应用程序,django将无法检测到数据库中已经应用了新的迁移,并将在运行python manage.py migrate时再次尝试运行它们。在
python manage.py migrate
当这种情况发生时,迁移失败,说明relation appName.XYZ already exists!。在
relation appName.XYZ already exists!
为了让django明白您的迁移已经反映在数据库中,您必须伪造它们:
这将更新迁移历史记录表并将迁移标记为已应用,但不会尝试在数据库中创建表。在
更新(感谢@GwynBleiD):
这里的一个问题是,已应用的已删除迁移将列在数据库的migrations history表中。对于初始的python manage.py makemigrations myApp,这不是问题,但是对于任何其他迁移,它将引发关于inconsistent migration history的错误。在
python manage.py makemigrations myApp
inconsistent migration history
为了避免这种情况,您必须手动从数据库中的django_migrations表中删除引用不存在迁移的任何行。在
首先,即使在生产中发生这种情况,也不要惊慌。在
当您删除了所有迁移时,django忘记了这个应用程序应该由migrations管理。Django默认返回到传统的
python manage.py syncdb
无迁移行为,并且在运行python manage.py makemigrations
时不会尝试检测更改或生成新的迁移为了让它知道迁移,您必须专门为您的应用程序运行命令:
但是,对于正在运行的应用程序,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表中删除引用不存在迁移的任何行。在
相关问题 更多 >
编程相关推荐