Обновить базу данных django, чтобы отразить изменения в существующих моделях

Я уже определил модель и создал связанную с ней базу данных через manager.py syncdb. Теперь, когда я добавил несколько полей в модель, я снова попробовал syncdb, но выход не появляется. При попытке получить доступ к этим новым полям из моих шаблонов я получаю исключение "No Such Column", что заставляет меня думать, что syncdb фактически не обновляет базу данных. Какая здесь правильная команда?

Ответ 1

Кажется, что вам нужна миграционная система. South действительно приятно, отлично работает, есть некоторые средства автоматизации, облегчающие ваш рабочий процесс. И имеет отличный tutorial.


note: syncdb не может обновлять существующие таблицы. Иногда невозможно решить, что делать автоматически - почему южные скрипты велики.

Ответ 2

Как и Django 1.7+, встроенная Django 1.5)

Если ваши изменения нарушают вашу старую схему, это не сработает - в этом случае инструменты вроде South или Django Evolution отличные.

Ответ 3

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

python manage.py makemigrations <your app name>
python manage.py migrate

Ответ 4

Django syncdb не изменяет существующие таблицы в базе данных, поэтому вам нужно сделать это вручную. Как я всегда это делаю:

  • Сначала измените класс модели.
  • Затем запустите: manage.py sql myapp.
  • Посмотрите на sql, который он распечатает, и посмотрите, как он представляет изменение, которое вы собираетесь сделать.
  • Внесите изменения вручную с помощью менеджера баз данных.
  • Убедитесь, что все работает правильно, используя сайт администратора.

Если вы используете sqllite, хорошим менеджером является плагин firefox: ссылка

Ответ 5

Другим инструментом будет эволюция джанго. В большинстве случаев не требуется сокращение таблицы.

эволюция django

Просто установите его как любое другое приложение django и запустите:

python manage.py evolve --hint --execute

Ответ 6

deseb - отличный инструмент для этого.

После установки вы можете написать. /manage.py sqlevolve и создать команды sql, необходимые для синхронизации структуры базы данных с вашими моделями.

Ответ 7

Вам нужно отказаться от своих таблиц, прежде чем вы сможете их воссоздать с помощью syncdb.

Если вы хотите сохранить существующие данные, вам необходимо выгрузить свою базу данных, отпустите свои таблицы, запустите syncdb, чтобы создать новую базу данных, а затем перезагрузите старые данные в свои новые таблицы.

Есть инструменты, которые помогают в этом. Однако во многих случаях это также легко сделать вручную.