Отслеживание версий, автоматизация изменений схемы БД с помощью django
Вопрос
В настоящее время я рассматриваю фреймворк Python Django для будущих веб-приложений на основе баз данных, а также для порта некоторых приложений, написанных в настоящее время на PHP.Одной из самых неприятных проблем в последние годы моей работы было отслеживание изменений схемы базы данных и развертывание этих изменений в продуктивных системах.Я не осмелился попросить иметь возможность их отменить, но, конечно, для тестирования и отладки это была бы отличная функция.Из других вопросов здесь (например, Вот этот или Вот этот), я вижу, что я не одинок и что это не тривиальная проблема.Кроме того, я нашел много вдохновения в ответах.
Теперь, поскольку Django кажется очень мощным, есть ли у него какие-либо инструменты, которые помогут справиться с вышеперечисленным?Может быть, это даже есть в их документах, и я это пропустил?
Решение
Существует как минимум две сторонние утилиты для управления миграцией схемы БД. Юг и Джанго Эволюция.Я не пробовал ни один из них, но слышал кое-что хорошее о South, хотя Evolution существует немного дольше.
Также посмотрите СхемаЭволюция в вики Джанго.Это просто вики-страница о переносе базы данных.
Другие советы
Когда я проверял последний раз (версия 0.97), syncdb сможет добавлять таблицы для синхронизации схемы вашей БД с файлом models.py, но не может:
- Переименуйте или добавьте столбец в заполненную базу данных.Вам нужно сделать это вручную.
- Рефакторизуйте свою модель (например, разделите таблицу на две части) и соответствующим образом заполните свою БД.
Однако возможно написать сценарий Django для выполнения миграции, играя с двумя разными менеджеры, но это может занять много времени, если ваша БД большая.
На недавнем DjangoCon прошла панельная сессия по изменениям схемы БД;Eсть видео сеанса (спасибо Google), который должен предоставить некоторую полезную информацию о ряде этих утилит.
И теперь есть еще миграция.От объявление:
django-evolution пытается решить эту проблему умным способом, обнаруживая изменения в моделях, которые еще не отражены в схеме базы данных, и выясняя, что нужно сделать, чтобы снова синхронизировать их. Напротив, dmigrations использует глупый подход:он требует от вас явного указания изменений в последовательности миграций, которые, в свою очередь, будут применяться для приведения базы данных в самое последнее состояние, отражающее базовые модели.
Это означает дополнительную работу для разработчиков, создающих миграции, но также делает весь процесс полностью прозрачным — для наших проектов мы решили использовать самую простую систему, которая могла бы работать.
(Мой смелый)
Я слышал много хорошего о Ветка эволюции схемы Django и это были мнения реальных пользователей.В основном он работает «из коробки» и делает то, что должен.
Тебе следует поискать миграция, он работает немного иначе, чем django-eveoltions.Он показывает вам все, что делает, а в сложных случаях просит вашего вмешательства.Это должно быть здорово.