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