Я уже определил модель и создал ее связанную базу данных через manager.py syncdb
. Теперь, когда я добавил некоторые поля к модели, я попробовал syncdb
снова, но никакой вывод не появляется. После попытки получить доступ к этим новым полям из моих шаблонов, я не получаю "Такой Столбец" исключение, ведя меня, чтобы полагать, что syncdb на самом деле не обновил базу данных. Какова правильная команда здесь?
Похоже, вам нужна миграционная система. Юг действительно хорош, отлично работает, имеет некоторые средства автоматизации, чтобы облегчить ваш рабочий процесс. И имеет отличное учебное пособие .
примечание: syncdb не может обновить ваши существующие таблицы. Иногда невозможно решить, что делать автоматически - вот почему южные скрипты такие замечательные.
Синхронизация Django не изменяет существующие таблицы в базе данных, поэтому делать это нужно вручную. Я всегда так делаю:
Если вы используете sqllite, то хорошим менеджером является плагин Firefox: ссылка
deseb - отличный инструмент для этого.
Установив его, вы можете написать sqlevolve ./manage.py и он сгенерирует sql команды, необходимые для синхронизации структуры БД с вашими моделями.
. Вам необходимо удалить ваши таблицы, прежде чем вы сможете воссоздать их с помощью syncdb
.
Если вы хотите сохранить ваши существующие данные, то вам необходимо выгрузить вашу базу данных,
бросьте свои таблицы, запустите syncdb
для создания новой базы данных, затем перезагрузите старые данные в новые таблицы.
Есть инструменты, которые помогут в этом. Однако во многих случаях это так же просто сделать вручную.
Другим инструментом будет эволюция джанго. В большинстве случаев не требуется сбрасывать таблицу.
Просто установите его как любое другое приложение джанго и запустите:
python manage.py evolve --hint --execute
.Начиная с версии Django 1.7+, встроенная поддержка миграции позволяет выполнять миграцию схемы базы данных, сохраняющей данные. Вероятно, это лучший подход, чем решение, представленное ниже.
Другим вариантом, не требующим дополнительных приложений, является использование встроенных функций management.py
для экспорта данных, очистки базы данных и восстановления экспортированных данных.
Приведенные ниже методы обновят таблицы базы данных для вашего приложения, но полностью уничтожат все данные, которые существовали в этих таблицах. Если изменения, внесенные в модель приложения, не нарушают старую схему (например, вы добавили новое необязательное поле), вы можете просто выкинуть данные перед этим и перезагрузить их после этого, например:
python manage.py dumpdata <your_app> > temp_data.json
python manage.py reset <your_app>
python manage.py loaddata temp_data.json
python manage.py dumpdata <your_app> > temp_data.json
python manage.py sqlclear <your_app> | python manage.py dbshell
python manage.py syncdb
python manage.py loaddata temp_data.json
(Команда reset
была устарела и затем удалена в Django 1.5)
Если Ваши изменения нарушают Вашу старую схему, это не сработает - и в этом случае такие инструменты, как South или Django Evolution, великолепны.