Его*_*дев 14 python django postgresql django-models django-migrations
有两个模型组和学生,只有一个表的组,学生表被删除.
如何maje Django再次创建它?如果我做了数字,它会打印"未检测到任何变化".
在管理页面上,当我单击Students表时,它会抛出异常:
relation "students_students" does not exist
Run Code Online (Sandbox Code Playgroud)
Raú*_* EL 39
在django 1.7中你可以尝试:
1. Delete your migrations folder
2. In the database: DELETE FROM django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations
4. python manage.py migrate --fake
Run Code Online (Sandbox Code Playgroud)
如果您在django 1.9.5中工作,这是此问题的100%解决方案:
1. Delete your migrations folder
2. In the database: DELETE FROM django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations app_name
4. python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
这对我来说100%有效!
没有一种简单的方法可以让Django重新创建一个手动删除的表.手动更改数据库后,Django对数据库的视图(来自迁移)与现实不同,修复起来可能很棘手.
如果运行sqlmigrate命令,它将显示创建表所需的SQL.您可以在数据库shell中运行sql.假设您的应用名称是students,并且创建该表的迁移是00XX_create_students.py,您将执行以下操作:
./manage.py sqlmigrate students 00XX_create_students
Run Code Online (Sandbox Code Playgroud)
如果学生表中有外键,请注意,也必须创建约束.
对我有用的唯一方法:
rm -r <app-name>/migrations/
python manage.py makemigrations <app-name>
python manage.py sqlmigrate <app-name> 0001_initial
Run Code Online (Sandbox Code Playgroud)
复制它打印出来的内容(或者,根据您实际从数据库中删除的内容,只复制部分 SQL 查询)。
将这些复制的查询应用于您的数据库:
psql -U user_name -h 127.0.0.1 database_name
Run Code Online (Sandbox Code Playgroud)
粘贴您从 SQL 查询打印输出中复制的内容。
提交查询。
就是这样 - 您丢失的表已创建。
对我有用的答案如下:
假设您的数据库中某个模型的表已被删除,您需要重新创建,然后执行以下操作。
注释掉 models.py 中创建已删除表的模型(模型类或创建表的行,如a = models.ManyToManyField(...))
run: python manage.py makemigrations <app-name>,其中<app-name>是包含 models.py 的应用程序的名称
跑步:python manage.py migrate --fake <app-name>
取消注释 models.py 中的模型
跑步:python manage.py makemigrations <app-name>
运行:(python manage.py migrate <app-name> 没有--fake)
你的表应该回到数据库中。但表中的所有数据都将丢失。
我有一个迁移问题,我不得不通过 pgadmin 删除/删除一个表。然后,当我makemigrations和migrate桌子没有重新创建时。通过这种方式,我发现这个程序对我有用:
python manage.py migrate --fake app_name zero
python manage.py migrate app_name
Run Code Online (Sandbox Code Playgroud)
[笔记]
python manage.py makemigrationszero,例如python manage.py migrate --fake myappname 0005| 归档时间: |
|
| 查看次数: |
19848 次 |
| 最近记录: |