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 имеет встроенную поддержку миграции.

См. https://docs.djangoproject.com/en/dev/releases/1.7/

Другие вопросы по тегам