странная миграция из django в базу данных postgres.Как сохранить существующие данные - PullRequest
0 голосов
/ 12 февраля 2019

Я иду странным путем, но это результат обстоятельств.Мне нужно было создать один файл models.py из существующей базы данных postgres с помощью inspect_db.Далее я исправляю какое-то поле (было несколько проблем с ключами) и создаю 2 приложения внутри этого проекта.Итак, теперь у меня есть 3 models.py (это split models.py, который был сгенерирован inspect_db).managed = True было добавлено.Классы имеют те же ссылки и типы данных, что и в базе данных. Далее я хочу интегрировать эти модели в существующую базу данных.Я делаю миграцию, я мигрирую, и в конце БД имеют только системные таблицы django (auth_, django_migrations и т. Д.). Ни один из моих классов (хотя файлы миграции создавались).Поэтому я попытался удалить каталоги миграций и повторить makemigrations и migrate, но терминал выкинул его:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.
(forest-venv) user@user-HP-Z800-Workstation ~/MyProjects/forest-venv/lesoved $ python manage.py runserver 8001
Performing system checks...

Если я попытаюсь сделать миграцию еще раз - без изменений.Я попытался удалить информацию о моих приложениях в таблице django_migrations - безрезультатно.

Итак, мои вопросы: - Можно ли интегрировать новые модели в существующую базу данных (если имена, ключи и форматы в порядке)?- Возможна ли интеграция путем сохранения данных из существующей базы данных после миграции?- Как вернуть возможность совершить миграцию?теперь это не работа.

1 Ответ

0 голосов
/ 13 февраля 2019

Хитрость при использовании существующей базы данных заключается в том, чтобы убедиться, что вы начинаете с четко определенного состояния: сначала приведите Django в то же состояние, что и ваш db, и только после этого начните вносить изменения в свои модели.Итак, это шаги:

  1. Убедитесь, что в вашей базе данных нет таблицы django-migrations, при необходимости удалите ее с помощью SQL.(Примечание: я предполагаю, что эта база данных не была сгенерирована Django для начала, и вы создаете новое приложение django)
  2. Создайте свои модели с inspectdb.При необходимости переименуйте модели, чтобы они имели правильный CamelCase .Если вы переименовываете модели или поля, которые изменят имя таблицы или столбца в БД, обязательно установите db_table (Meta параметры вашей модели) и db_column (как атрибут поля).
  3. Запустите manage.py makemigrations.Проверьте файлы миграции для ваших моделей, просто чтобы убедиться, что имена совпадают с вашей базой данных.
  4. Для ваших собственных приложений запустите manage.py migrate <app> --fake.Это добавит миграции к таблице django-migrations в вашей базе данных, как если бы они выполнялись без фактического запуска.
  5. Затем запустите manage.py migrate, чтобы создать предоставленные django таблицы (auth, contenttype, session и т.д ...)
  6. Теперь вы находитесь в состоянии, когда вы можете начать что-то менять.Если вы измените модель и запустите makemigrations, она должна создать миграцию только для ваших изменений.
...