Добавление полей в уже существующую базу данных для Django (версия <1.7) - PullRequest
10 голосов
/ 01 марта 2011

Я использую Django (

Я пытаюсь добавить новое поле в класс уже существующей модели.С этим классом уже связаны данные.

manage.py syncdb не добавляет новые поля в базу данных.

Был ли способ:

  1. Добавить новое поле в уже существующий класс и убедиться, что ему выделена запись в БД?

  2. Заполнить это новое поле пустой строкой для всех уже существующих БДзаписи?

Ответы [ 3 ]

19 голосов
/ 01 марта 2011

Этот ответ все еще виден, но устарел.Начиная с версии 1.7 Django поставляется со встроенной системой миграции , написанной тем же автором, что и South, и устарела syncdb, хотя она все еще будет работать.

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

python manage.py makemigrations  
python manage.py migrate

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


Для django <1.7 </h3> syncdb не будет добавлять новые столбцы.См. http://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb Вам нужно будет добавить их вручную.Например,.замените <> соответствующей информацией: python manage.py dbshell ALTER TABLE <appname_modelname> ADD COLUMN <column_type> DEFAULT ''; Вы можете увидеть, что Django мог сделать для генерации столбцов на новом syncdb, используя: python manage.py sqlall app_name , а также копирование и вставкуALTER TABLE заявления оттуда. В противном случае вы можете посмотреть на сторонние приложения, такие как Django-South , которые являются инструментами миграции базы данных.

10 голосов
/ 01 марта 2011

Установите юг в вашем django, и вы легко сможете обрабатывать существующие таблицы отметьте это

Если вы действительно хотите использовать Django-South, установите его на свой django, после добавления новых полей в существующую модель, запустите

python manage.py schemamigration --initial

Это создаст файл в приложении вашего проекта. затем,

python manage.py migrate

То есть ваш стол изменен.

0 голосов
/ 01 марта 2011

Существуют и другие варианты приложений для миграции (хотя наиболее часто используется Юг).

Я использовал django-evolution для своих проектов, и его было очень легко установить и начать использовать.

Юг кажется более полным, но для более простых задач может подойти django-evolution.

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