Я уже определил модель и создал связанную с ней базу данных через manager.py syncdb
. Теперь, когда я добавил несколько полей в модель, я снова попробовал syncdb
, но выход не появляется. При попытке получить доступ к этим новым полям из моих шаблонов я получаю исключение "No Such Column", что заставляет меня думать, что syncdb фактически не обновляет базу данных. Какая здесь правильная команда?
Обновить базу данных django, чтобы отразить изменения в существующих моделях
Ответ 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 и запустите:
python manage.py evolve --hint --execute
Ответ 6
deseb - отличный инструмент для этого.
После установки вы можете написать. /manage.py sqlevolve и создать команды sql, необходимые для синхронизации структуры базы данных с вашими моделями.
Ответ 7
Вам нужно отказаться от своих таблиц, прежде чем вы сможете их воссоздать с помощью syncdb
.
Если вы хотите сохранить существующие данные, вам необходимо выгрузить свою базу данных,
отпустите свои таблицы, запустите syncdb
, чтобы создать новую базу данных, а затем перезагрузите старые данные в свои новые таблицы.
Есть инструменты, которые помогают в этом. Однако во многих случаях это также легко сделать вручную.
Ответ 8
Для версий 1.4.1 и выше команда изменилась на
python manage.py flush
Прочтите официальный документ перед тем, как использовать его как , он удалит все ваши данные.