Каков наилучший способ переноса данных в Django? - PullRequest
28 голосов
/ 07 октября 2008

После внесения некоторых изменений в мои модели (например, новое поле в модели и новая модель), как лучше всего отразить эти изменения в моей заполненной базе данных?


PS: я хотел видеть множество решений в одном месте по рейтингу. Видимо, больше решений уже перечислены здесь .

Ответы [ 6 ]

23 голосов
/ 16 октября 2008

Другой метод - использовать аргументы dumpdata и loaddata для manage.py, убивая вашу базу данных в промежутке:

  1. python manage.py dumpdata > dump.json
  2. С помощью внешнего инструмента отбросьте все затронутые таблицы или убейте весь БД
  3. python manage.py loaddata dump.json

Подробнее см. manage.py docs .

17 голосов
/ 07 октября 2008

Я задал похожий вопрос здесь и получил довольно много ответов.

Существует довольно много способов сделать это, например, вручную выполнить дамп и перезагрузку с помощью SQL, с помощью фикстур или с помощью одного из «появляющихся» пакетов эволюции схемы для Django:

3 голосов
/ 12 сентября 2014

Django теперь имеет свои собственные встроенные миграции, задокументированные по адресу:

https://docs.djangoproject.com/en/dev/topics/migrations/

3 голосов
/ 07 октября 2008

Зависит от объема изменений. Если это за пределами ALTER, вы делаете серьезную операцию. Сделайте резервные копии модели, а также базы данных, чтобы вы могли вернуться.

Я предпочитаю поместить вашу новую (пересмотренную, исправленную, расширенную) модель в качестве НОВОГО приложения. У него не будет URL или чего-то еще, только модель.

  1. Создание новой модели в качестве нового приложения. Создавайте тесты, просто чтобы убедиться, что это работает.
  2. syncdb для создания этой временной реализации новой модели.
  3. Напишите небольшую разовую утилиту для запроса старой модели и загрузите новую. Вы можете попробовать это в чистом SQL. Я предпочитаю написать простой запрос, создать и сохранить цикл.
  4. После загрузки новой модели вы можете выгрузить ее в файл JSON.

После того, как вы извлекли данные из старой модели, вы можете перестроить свою БД в предпочтительном новом формате.

  1. Переместите новую модель в существующее приложение.
  2. Удалите старые версии таблиц приложения.
  3. syncdb для создания новых таблиц.
  4. Загрузить файл JSON с данными.
2 голосов
/ 07 октября 2008

Посмотрите с manage.py sqlall, каковы параметры для новых столбцов, и вручную добавьте их в свою базу данных с помощью операторов Alter table. Таким образом, вам не нужно переделывать вашу базу данных; Это требует некоторых знаний SQL, хотя ...

Взгляните здесь (Прокрутите вниз до "Внесение изменений в схему базы данных")

0 голосов
/ 25 октября 2013

Perform these steps in order may help you:

For more details,

нажмите здесь: http://south.readthedocs.org/en/latest/

1) python manage.py schemamigration apps.appname --initial

Вышеуказанный шаг создает папку миграции по умолчанию.

2) python manage.py migrate apps.appname --fake

генерирует поддельную миграцию.

3) python manage.py schemamigration apps.appname --auto

Затем вы можете добавлять поля по своему желанию и выполнять приведенную выше команду.

4) python manage.py migrate apps.appname

Затем перенесите файлы в базу данных.

...