South migration - миграция базы данных

категория: Django
Работая с базой данных приходит время, когда нужно добавить какое-то поле или таблицу. Делая изменения в свой models.py, я запускал сервер, а там ошибки, что таких полей и таблиц не существует, что же делать? Google мне рассказал о команде ./manage.py reset)) - все вроде заработало, но вся информация из базы удалилась, но как бы меня оно не сильно испугало, так как инфы у меня особо не было, но со временем мой блог начал наполняться, и снова при необходимости внести изменения в модели использовать ./manage.py reset уже не было смысла. И тут на помощь мне пришла South migration. Подробнее читайте на офф сайте http://south.readthedocs.org. Итак South migration, что это такое? South migration - миграция базы данных. Вы можете изменять свои модели и при этом не терять инфу которая у вас уже есть. Установка: Мне хватило набрать в консоли:
sudo easy_install South
Дальше я делал такие шаги: 1. Создаем свой апликейшен, например:
python manage.py startapp myapp
2. Добавляем 'south' и 'myapp' в INSTALLED_APPS в своем settings.py 3. Создаем свои модели в models.py 4. Запускаем:
python manage.py syncdb
- оно добавляет django и south таблицы в базу данных. 5. Запускаем:
python manage.py schemamigration myapp --initial
- оно создаст начальные файлы миграции для вашего приложения. 6. Далее запускаем саму миграцию:
python manage.py migrate app
- оно добавляет наши таблицы в базу данных. 7. Далее после изменений моделей просто пользуемся:
python manage.py schemamigration myapp --auto
и будет вам радость)). Все описанное выше - правильно, но я столкнулся с одной проблемой, когда у меня уже была создана база данных. Миграция (python manage.py migrate app) не срабатывала и писало FATAL ERROR. Как оказалось при migrate (если миграция делается первый раз) оно пытается выполнить все миграции, начиная с initial, в таких случаях делается
python manage.py migrate myapp 0001 --fake
- для фейкового применения той первой initial миграции. А дальше
python manage.py migrate app
и будет вам счастье)).


blog comments powered by Disqus