#python-3.x #django #postgresql #migration #django-3.0
Вопрос:
У меня есть старый проект django и новый проект django. Я создал файл дампа памяти из базы данных старого django. А также я внес изменения в таблицы и создал новые таблицы.
Теперь я хочу загрузить этот файл дампа в свое новое приложение django. Я сталкиваюсь с ошибками, когда сначала переношу, а затем восстанавливаю данные или сначала восстанавливаю, а затем переношу.. Когда я сначала выполняю миграцию, там говорится, что таблицы уже существуют.
Когда я сначала восстановлю , там будет написано: django.db.utils.ProgrammingError: relation "django_content_type" already exists
Я использую « migrate --fake
идет ошибка«, но в базе данных не создаются новые таблицы.
Я провел 3-4 дня, но не смог добиться успеха.
Пожалуйста, помогите мне, если сможете.
PS: моя база данных postgresql
Комментарии:
1. содержит ли новая база данных только новые таблицы или вы также добавили столбцы в текущие таблицы?
Ответ №1:
Это непросто и потребует некоторых ручных вмешательств, и это зависит от того, что вы хотите сделать в будущем
- Если таблицы, которые уже существуют в базе данных, имеют стабильный дизайн и не будут изменены, или вы можете внести изменения вручную, используя инструкции SQL, а затем установить
managed = False
мета-параметры моделей, это заставит Django пропустить миграцию для этих моделей - Если вы хотите сохранить возможности миграции в новом проекте для всех моделей, то это будет сложнее
- Удалите все ваши миграции
- Вам нужно сделать ваши модели эквивалентными вашей базе данных, вы можете настроить
managed=False
для новых моделей, таких какUsers
- Запустите
python manage.py makemigrations
, это создаст структуру исходной базы данных. - Подделка выполнения миграций
python manage.py migrate --fake
- Сбросьте записи таблицы django_migrations
- Создайте новую пустую миграцию (с —empty) и добавьте в нее инструкции SQL
django_migrations
таблицы, используяmigrations.RunSQL()
- теперь снова подделайте, чтобы пропустить эту новую миграцию.
- Теперь вы готовы использовать миграции, как обычно.
При установке новой базы данных вам просто нужно будет запустить python manage.py migrate
Комментарии:
1. Я использовал managed=False и выполнил следующие действия: 1) восстановил файл дампа 2) удалил все предыдущие миграции из базы данных 3) удалил все предыдущие миграции из файлов 4) внес изменения 5) мигрировал 6) мигрировал-подделка сработала для меня.