Как перенести данные из старой базы данных в новую измененную базу данных в django?

#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 пропустить миграцию для этих моделей
  • Если вы хотите сохранить возможности миграции в новом проекте для всех моделей, то это будет сложнее
    1. Удалите все ваши миграции
    2. Вам нужно сделать ваши модели эквивалентными вашей базе данных, вы можете настроить managed=False для новых моделей, таких как Users
    3. Запустите python manage.py makemigrations , это создаст структуру исходной базы данных.
    4. Подделка выполнения миграций python manage.py migrate --fake
    5. Сбросьте записи таблицы django_migrations
    6. Создайте новую пустую миграцию (с —empty) и добавьте в нее инструкции SQL django_migrations таблицы, используя migrations.RunSQL()
    7. теперь снова подделайте, чтобы пропустить эту новую миграцию.
    8. Теперь вы готовы использовать миграции, как обычно.

При установке новой базы данных вам просто нужно будет запустить python manage.py migrate

Комментарии:

1. Я использовал managed=False и выполнил следующие действия: 1) восстановил файл дампа 2) удалил все предыдущие миграции из базы данных 3) удалил все предыдущие миграции из файлов 4) внес изменения 5) мигрировал 6) мигрировал-подделка сработала для меня.