Как восстановить удаленную таблицу с Django Migrations?

Существует две модели групп и студентов и только одна таблица для групп, таблица "Студенты" была удалена.

Как создать Django снова? Если я сделаю makemigrations, он напечатает "Изменения не обнаружены".

На странице администратора, когда я нажимаю на таблицу "Студенты", возникает исключение:

relation "students_students" does not exist

Ответ 1

В 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% для меня!

Ответ 2

Нет простого способа заставить Django воссоздать таблицу, которую вы удалили вручную. Как только ваша база данных изменена вручную, Django-представление базы данных (от миграций) отличается от реальности, и ее может быть сложно исправить.

Если вы запустите команду sqlmigrate, она покажет вам необходимый SQL для создания таблицы. Вы можете запустить SQL в оболочке базы данных. Предполагая, что имя вашего приложения - students, и миграция, создавшая таблицу, была 00XX_create_students.py, вы должны сделать:

./manage.py sqlmigrate students 00XX_create_students

Будьте осторожны, если есть внешние ключи для таблицы учеников или из нее, необходимо также создать ограничения.

Ответ 3

Для django 2 сделайте это:

 1. Delete your migrations folder

 2. In the database: 'DELETE FROM django_migrations WHERE app = 'app_name';'

 3. python manage.py makemigrations app_name

 4. python manage.py migrate

 5. python manage.py migrate --fake default   //This was the key to solve my problem

Ответ 4

Я создаю таблицу вручную, и это помогает.

Ответ 5

Для Django 1.10.4 Я удалил файл db.sqlite3 из папки проекта и выполнил следующие команды:

  • python manage.py makemigrations app_name
  • python manage.py migrate

Ответ 6

Django 1.11.2 с использованием MariaDB, случайное падение таблицы базы данных. Чтобы воссоздать таблицу, попробуйте выполнить следующее: 1/Удалить все, кроме init.py в каталоге приложений/миграций 2/выберите * из django_migrations; удалить из django_migrations, где app = 'yourapp'; 3/Проверьте, что ваша модель хороша и запущена: python manage.py makemigrations 4/python manage.py migrate

Работает для меня!

Ответ 7

Я просто удалил папку миграции, сбросил всю базу данных, а затем сделал миграцию для приложения

python3 manage.py makemigration 
python3 manage.py migrate

и он вернулся.

Ответ 8

Переименуйте имя удаленной таблицы в some_new_name в models.py и запустите:

python3 manage.py makemigration
 python3 manage.py migrate

снова переименуйте таблицу some_new_name в исходное имя и запустите

python3 manage.py makemigration
python3 manage.py migrate

наконец, перейдите в dbshell и удалите таблицу some_new_name

Ответ 9

Ответ, который работал для меня, следующий:

Предположим, что в вашей базе данных таблица модели была удалена, и вам нужно ее заново создать, а затем выполните следующие действия.

  • закомментируйте модель в models.py, который создает удаленную таблицу (либо класс модели, либо строку, которая создает таблицу, подобную a = models.ManyToManyField(...))

  • запустите: 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)

и вы за столом должны вернуться в базу данных. Но любые данные, которые были в таблице, будут потеряны.