Как восстановить удаленную таблицу с 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)
и вы за столом должны вернуться в базу данных. Но любые данные, которые были в таблице, будут потеряны.