Таблица синхронизации модели Django - PullRequest
4 голосов
/ 12 июля 2009

Если я изменю поле в модели Django, как я могу синхронизировать его с таблицами базы данных? Нужно ли делать это вручную в базе данных или есть инструмент, который помогает с процессом?

Ответы [ 5 ]

6 голосов
/ 12 июля 2009

Увы, Django не поддерживает простого решения этой проблемы.

Единственное, что django сделает для вас, это перезапустите базу данных с новыми таблицами, соответствующими вашим новым моделям:

$ #DON'T DO THIS UNLESS YOU CAN AFFORD TO LOSE ALL YOUR DATA!
$ python PROJECT_DIR/manage.py syncdb

следующий вариант - использовать различные опции sql * для manage.py, чтобы увидеть, что django сделает для сопоставления текущих моделей с базой данных, а затем выполнить свои собственные команды ALTER TABLE, чтобы все работало правильно. Конечно, это подвержено ошибкам и трудно.

Реальным решением является использование инструмента миграции базы данных, такого как south , для генерации кода миграции.

Вот аналогичный вопрос с обсуждением различных вариантов миграции базы данных для django.

4 голосов
/ 05 августа 2009

Кажется, что я не могу добавить комментарий к помеченному ответу, возможно, из-за того, что у меня недостаточно повторений (хотя было бы неплохо, если бы SO сказал мне об этом).

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

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

3 голосов
/ 12 июля 2009

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

2 голосов
/ 12 июля 2009

Django не предоставляет этого из коробки.

Вот некоторая информация из Книги Джанго о , делающая это вручную (см. Внесение изменений в схему базы данных). Это работает для простых, простых изменений.

В долгосрочной перспективе вы, вероятно, захотите использовать инструмент миграции. Есть три основных варианта:

РЕДАКТИРОВАТЬ: просматривая вопрос, связанный с TokenMacGuy, я добавлю еще два в список для полноты:

0 голосов
/ 13 июля 2009

Просто добавлю дополнительное мнение - миграция довольно приятна и понятна в использовании, но я бы сказал, что Юг - ваш лучший выбор. Опять же, в него легко войти, но он более мощный и поддерживает больше баз данных, чем просто MySQL. Он даже обрабатывает MSSQL, если это ваша вещь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...