表被删除了,我怎样才能让Django重新创建呢?

时间:2015-10-21 12:35:15

标签: python django postgresql django-models

有两个模型组和学生,并且只有一个表用于其中的组,学生表已被删除。

如何让Django再次创建它?如果我做了几个版本,它就会打印出#34;没有检测到任何变化"。

在管理员页面上,当我点击学生表时,它会抛出异常:

relation "students_students" does not exist

15 个答案:

答案 0 :(得分:25)

在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

如果您使用的是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

这对我来说是100%的工作!

答案 1 :(得分:8)

没有一种简单的方法可以让Django重新创建一个手动删除的表。手动更改数据库后,Django对数据库的视图(来自迁移)与现实不同,修复起来可能很棘手。

如果运行sqlmigrate命令,它将显示创建表所需的SQL。您可以在数据库shell中运行sql。假设您的应用名称为students,并且创建该表的迁移为00XX_create_students.py,您可以这样做:

./manage.py sqlmigrate students 00XX_create_students

如果学生表中有外键,请注意,也必须创建约束。

答案 2 :(得分:4)

2021 年 1 月

我遇到了迁移问题,我不得不通过 pgadmin 删除/删除一个表。然后,当我 makemigrationsmigrate 没有重新创建表。通过这种方式,我发现这个程序对我有用:

python manage.py migrate --fake app_name zero 
python manage.py migrate app_name

[注意]

  • 如果您没有预期的迁移文件,请在上述命令之前通过 python manage.py makemigrations
  • 创建该文件
  • 如果您不想回滚到初始(零)状态,请使用迁移文件的编号而不是 zero,例如python manage.py migrate --fake myappname 0005
  • 我已经在 Django 2.2
  • 中测试了这种方法

Read More

答案 3 :(得分:1)

从迁移应用程序文件夹中删除迁移文件夹,只需运行迁移命令:

  1. python3 manage.py makemigrations appname
  2. python3 manage.py migrate

答案 4 :(得分:0)

我手动创建表格并且有所帮助。

答案 5 :(得分:0)

对于Django 1.10.4 我从项目文件夹中删除了db.sqlite3文件,然后运行以下命令:

  1. python manage.py makemigrations app_name
  2. python manage.py migrate

答案 6 :(得分:0)

Django 1.11.2使用MariaDB,意外丢弃数据库表。 要重新创建表,请尝试以下操作: 1 /删除app / migrations目录中除 init .py之外的所有内容 2 / select * from django_migrations;从django_migrations中删除app ='yourapp'; 3 /检查你的模型是否正常并运行:python manage.py makemigrations 4 / python manage.py migrate

适合我!

答案 7 :(得分:0)

我刚刚删除了我的迁移文件夹,删除了整个数据库,然后我为该应用程序进行了迁移

python3 manage.py makemigration 
python3 manage.py migrate

它回来了。

答案 8 :(得分:0)

在models.py中将已删除的表名重命名为some_new_name并运行:

python3 manage.py makemigration
 python3 manage.py migrate

再次将some_new_name表重命名为原始名称并运行

python3 manage.py makemigration
  python3 manage.py migrate

最后,转到dbshel​​l并删除表some_new_name

答案 9 :(得分:0)

对我有用的答案如下:

假设数据库中的模型表已删除,您需要重新创建,然后执行以下操作。

  • 在models.py中注释模型,该模型创建已删除的表(模型类或创建诸如a = models.ManyToManyField(...)之类的表的行)

  • 运行:python manage.py makemigrations <app-name>,其中<app-name>是您拥有模型的应用程序的名称。py

  • 运行:python manage.py migrate --fake <app-name>

  • 取消对models.py中的模型的注释

  • 运行:python manage.py makemigrations <app-name>

  • 运行:python manage.py migrate <app-name>(不带--fake)

,您的表应该回到数据库中。但是表中的所有数据都会丢失。

答案 10 :(得分:0)

只需运行以下命令:

python manage.py migrate --run-syncdb

答案 11 :(得分:0)

对我有用的唯一方法:

rm -r <app-name>/migrations/
python manage.py makemigrations <app-name>
python manage.py sqlmigrate <app-name> 0001_initial

复制打印出的内容(或者,取决于您实际上从数据库中删除的内容,仅一部分SQL查询)。

将这些复制的查询应用于您的数据库:

psql -U user_name -h 127.0.0.1 database_name

粘贴从SQL查询打印输出中复制的内容。

提交查询。

就是这样-您丢失的表已创建。

答案 12 :(得分:0)

Django 3.1.3

直接在postgresql中删除数据库表-应用程序中的相关表。

The solution from Airstriker为我工作。 谢谢!

答案 13 :(得分:0)

如果已经创建了类并执行了迁移操作,然后又想向类中添加项目,请事先使用此命令清空迁移文件夹。 在Django 3中,我按照以下步骤进行操作,它可以100%工作

  1. Inf
  2. python manage.py makemigrations appname --empty
  3. python manage.py makemigrations appname

答案 14 :(得分:0)

实际上,上述方法对我不起作用,因此我只是执行以下解决方法,因为我不想手动编写整个查询来创建表。

所以我在设置文件中更改了数据库并在删除迁移文件夹后重新运行迁移命令,然后只是执行了 python 迁移命令它在另一个数据库中创建了新表,然后从那里刚刚在查询视图中打开了表,复制脚本,并将表插入到我的主数据库中。

相关问题