Версия трека, автоматизировать изменения схемы базы данных с помощью django

В настоящее время я смотрю на платформу Python Django для будущих веб-приложений на базе db, а также для порта некоторых приложений, написанных на PHP. Одним из самых неприятных вопросов в последние годы явилось отслеживание изменений схемы базы данных и внедрение этих изменений в производительные системы. Я не осмелился попросить также их отменить, но, конечно, для тестирования и отладки это будет отличная функция. Из других вопросов здесь (например, этот или этот, я вижу, что я не и что это не тривиальная проблема. Кроме того, я нашел много вдохновений в ответах там.

Теперь, поскольку Django кажется очень мощным, есть ли у него какие-либо инструменты, которые помогут вам в этом? Может быть, это даже в их документах, и я пропустил это?

Ответ 1

Существует, по крайней мере, две сторонние утилиты для обработки миграций схемы БД, South и Django Evolution. Я не пробовал ни одного, но я слышал кое-что о Юге, хотя Эволюция была вокруг немного дольше.

Кроме того, посмотрите на SchemaEvolution на вики Django. Это просто вики-страница о миграции db.

Ответ 2

В прошлый раз, когда я проверил (версия 0.97), syncdb сможет добавлять таблицы для синхронизации вашей схемы БД с вашим файлом models.py, но не может:

  • Переименуйте или добавьте столбец в заполненную БД. Вам нужно сделать это вручную.
  • Рефакторизуйте свою модель (например, разделите таблицу на две части) и замените свою БД соответственно.

Возможно, было возможно написать Django script, чтобы выполнить миграцию, играя с двумя разными менеджерами, но это может возраст, если ваш БД большой.

Ответ 3

В недавнем DjangoCon произошел сеанс панели по изменениям схемы БД; есть видео сеанса (спасибо Google), который должен предоставить некоторую полезную информацию о ряде этих утилит.

Ответ 4

И теперь также dmigrations. Из анонс:

django-evolution пытается решить эту проблему умным путем, обнаружив изменения в моделях, которые еще не нашли отражение в схеме базы данных, и выясните, что нужно сделать, чтобы привести их обратно в синхронизацию. В противоположность этому, dmigrations принимает глупый подход: он требует, чтобы вы явно указывали изменения в последовательности миграций, которые будут применяться в свою очередь, чтобы привести базу данных в самое последнее состояние, которое отражает основные модели.

Это означает дополнительную работу для разработчиков, которые создают миграции, но также делает весь процесс полностью прозрачным - для наших проектов мы решили пойти с самой простой системой, которая могла бы работать.

(Мой жирный шрифт)

Ответ 5

Я слышал много хорошего о Django Schema Evolution Branch, и это были предположения реальных пользователей. Он больше всего работает из коробки и делает то, что он должен делать.

Ответ 6

U следует искать Dmigrations, он немного отличается от django-eveoltions. Он показывает вам все, что он делает, и за усложненные вещи, которые он запрашивает у вас за ваши интервалы. Это должно быть здорово.