Pro*_*eus 35 python django django-1.7
使用Django 1.7迁移.
我不小心在我的数据库中删除了一个表.我假设通过再次运行迁移,这将重新创建表但不,Django声明"没有要迁移的迁移".
如何让Django重新创建表格?
我跑了:
> makemigrations - No changes detected
> migrate - No migrations to apply.
Run Code Online (Sandbox Code Playgroud)
我已经尝试对模型进行更改并运行新的迁移,它只是声明"表'x.test_customer'不存在"这是正确的,但我希望它会重新创建表.
J.Q*_*J.Q 51
转到您的数据库并找到该表django_migrations.删除所有app等于您的应用名称的行.
然后做一个makemigrations&migrate将工作.
Raú*_* EL 22
我找到并完美运作的另一种解决方案:
在django 1.7:
删除迁移文件夹
在数据库中:DELETE FROM django_migrations WHERE app = 'app_name'.
您也可以截断此表.
python manage.py makemigrations
python manage.py migrate --fake
在django 1.9.5中:
在数据库中:DELETE FROM django_migrations WHERE app = 'app_name'.
您也可以截断此表.
python manage.py makemigrations app_name
python manage.py migrate
这对我来说100%有效!
yuv*_*uvi 20
迁移检查模型中的差异,然后将其转换为转换为SQL的操作.它不会自动将db方案与您的模型同步,也无法知道您丢弃了一个表(它不知道手动更改,因为,您不应该进行手动更改.这就是重点)
答案?手动更改也需要手动迁移.您需要做的只是编写自己的迁移并手动告诉south重新构建表.这不是很困难,文档使它变得非常简单.做这样的事情:
from django.db import migrations, models
class Migration(migrations.Migration):
operations = [
migrations.CreateModel("Foo"),
migrations.AddField("Foo", "bar", models.IntegerField(default=0))
]
Run Code Online (Sandbox Code Playgroud)
您可以查看第一个迁移文件(首先创建模型的文件)并复制粘贴几乎所有文件.然后,您所要做的就是像往常一样运行迁移
我实际上找到了一种更简单的方法.你假设你回滚了不存在的东西,然后重新迁移.如果您的迁移0005是创建表的那个:
python manage.py migrate myapp --fake 0004
python manage.py migrate myapp
Run Code Online (Sandbox Code Playgroud)
之后应该是好的!
如果您需要稍后跳过,请执行以下操作:
python manage.py migrate myapp --fake 0004
python manage.py migrate myapp 0005
python manage.py migrate myapp --fake
Run Code Online (Sandbox Code Playgroud)
之后应该是好的!
在我的情况下,django 2.0.2为了重新创建删除的表,我需要在其中注释我的模型myapp,然后使用--fake和取消注释我的模型并在没有--fake
一点不同的情况下迁移raul 答案:
DELETE FROM django_migrations WHERE app = 'app_name'。models.py和所有这些模型的用法views,signals等等(以防止错误)。python manage.py makemigrations YOUR_APP_NAMEpython manage.py migrate --fakepython manage.py makemigrations YOUR_APP_NAMEpython manage.py migrate这应该可以解决一些用户问题。