django: обновить схему базы данных без потери данных
Каково лучшее решение, если я хочу обновить (изменить) мою схему базы данных (добавить новые поля в таблицы, добавив их только в модели django), не теряя данные в этих таблицах? "syncdb", конечно, не добавляет их, поэтому мне нужны ваши советы, как изменить таблицы, не удаляя их и не воссоздавая заново с помощью syncdb.
Спасибо игнас
3 ответа
Когда юг не вариант, я просто вручную пишу сценарии для небольших изменений. и большие я использую
./manage.py dumpdata appname
http://docs.djangoproject.com/en/dev/ref/django-admin/
Бросьте это в файл. Запустите регулярное выражение замены, чтобы обновить все добавленные / удаленные поля, и тогда возможен сброс этого приложения. Я должен признать, что давно этого не делал, но я могу получить какой-то конкретный код, чтобы сделать это для вас, если это необходимо.
он загружается обратно с loaddata
редактировать
Данные дампа Django для одной модели? Этот вопрос похож и может иметь информацию, о которой я говорил.
Все еще дайте мне знать, если вам нужно, и я выкопаю свой старый сценарий (или напишу хороший простой) для вас.
ОБНОВИТЬ
./manage.py dumpdata appname --indent=4 > appname.json
#open your fav text editor and do a find/replace
./manage.py reset appname
./manage.py loaddata appname.json
Это должно сделать это. Когда вы выполняете поиск и замену, вам нужно только удалить поля, которых у вас больше нет, и добавить поля, которые не обнуляются. (как минимум).
Примечания: --indent=4 хорошо форматирует все для вас. Это означает 4 пробела. Сброс./manage.py работает только в pre django 1.3 (gah!) в django 1.3. ./manage dbshell
а также drop table
, Sql для этого найден из команды ./manage.py sqlreset appname
,
Кривая обучения...
Юг был объединен с ядром Django в версии 1.7.
Теперь есть встроенная функция django для переноса данных при изменениях схемы.
Django 1.7 имеет встроенную поддержку миграции.