Каков наилучший способ переноса данных в django
После внесения некоторых изменений в мои модели (например, новое поле в модели и новой модели), каков наилучший способ отразить эти изменения в моей заполненной базе данных?
PS: Я хотел увидеть множество решений в одном месте. Видимо, больше решений уже перечислено здесь.
Ответы
Ответ 1
Я задал аналогичный вопрос здесь и получил довольно много ответов.
Существует довольно много способов сделать это, например, вручную выполнять сброс и перезагрузку с помощью SQL, используя приборы или использовать один из "новых" пакетов эволюции схемы для Django:
Ответ 2
Другой метод - использовать аргументы dumpdata и loaddata для manage.py, убивая вашу базу данных между ними:
-
python manage.py dumpdata > dump.json
- С помощью внешнего инструмента удалите все затронутые таблицы или уничтожьте весь db
-
python manage.py loaddata dump.json
Подробнее см. manage.py docs.
Ответ 3
Зависит от объема изменений. Если это за пределами ALTER, вы делаете крупную операцию. Сделайте резервные копии модели, а также базы данных, чтобы вы могли вернуться.
Мое предпочтение заключается в том, чтобы добавить новую (пересмотренную, исправленную, расширенную) модель в качестве нового приложения. У него не будет URL или что-то еще, только модель.
- Создание новой модели в качестве нового приложения. Создайте тесты, чтобы убедиться, что они работают.
- syncdb для создания промежуточной реализации новой модели.
- Напишите небольшую одноразовую утилиту для запроса старой модели и загрузите новую модель. Вы можете попробовать это в чистом SQL. Я предпочитаю писать простой цикл запроса, сборки и сохранения.
- После загрузки новой модели вы можете отправить это в файл JSON.
Как только вы вытащили данные из своей старой модели, вы можете перестроить свою БД в предпочтительном новом формате.
- Переместите новую модель в существующее приложение.
- Удалите старые версии таблиц приложений.
- syncdb для создания новых таблиц.
- Загрузите файл JSON с данными.
Ответ 4
Django теперь имеет собственные встроенные миграции, задокументированные по адресу:
https://docs.djangoproject.com/en/dev/topics/migrations/
Ответ 5
Посмотрите с помощью manage.py sqlall, что параметры для новых столбцов и вручную добавьте их в свою базу данных с помощью операторов таблицы Alter. Таким образом, вам не нужно повторять свою базу данных; Это требует некоторых знаний SQL, хотя...
Посмотрите здесь (Прокрутите вниз до "Внесение изменений в схему базы данных" )
Ответ 6
Perform these steps in order may help you
:
For more details,
clickhere: 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
Затем перенесите файлы в базу данных.