DatabaseError: нет такой ошибки столбца
Итак, у меня есть модель, в которую я хотел добавить ImageField, поэтому я набрал picture = models.ImageField(upload_to = 'media/images')
Затем я запустил syncdb и пошел в оболочку:
python2 manage.py syncdb
python2 manage.py shell
Затем я импортировал модель и попытался
"model".objects.get(pk=1)
Я получаю сообщение об ошибке:
DatabaseError: no such column: people_people.picture
Когда я запускаю файл manage.py sql для модели
"picture" varchar(100) NOT NULL
находится в базе данных.
Какие решения у вас есть? Я не могу удалить данные в базе данных.
Ответы
Ответ 1
Как отмечено в документация syncdb
не добавляет столбцы в существующие таблицы, она создает только новые таблицы.
Я предлагаю запустить
python manage.py sqlall <your_app>
Глядя на sql, он выводит для таблицы, которую вы меняете, а затем запускаете
python manage.py dbshell
чтобы вручную выполнить команду ALTER TABLE
.
В будущем вам может понадобиться инструмент переноса, например South.
Ответ 2
Есть две возможности для получения этой ошибки. 1) Вы добавили дополнительное поле в модель после выполнения syncdb. 2) вы добавили новый класс в файл model.py в django.
Решение для этого:
Сначала установите юг с помощью команды
for windows: **easy_install south** //for that you need to go to the script folder of python folder in c drive.
for linux: **sudo easy_install south**
Затем следуйте инструкциям, которые включены здесь в руководства по миграции
step1- python manage.py schemamigration your_app_name --initial
step-2 python manage.py migrate your_app_name
Надеюсь, это поможет вам.
Ответ 3
Начиная с 1.7 миграции в Django заменяет юг.
Создайте новый набор инструкций по миграции, выполнив следующую команду в терминале:
$ python manage.py makemigrations
Проверьте выходные данные в папке миграции, которую он создает, чтобы убедиться, что они имеют смысл, и выполните следующую команду терминала, чтобы завершить миграции:
$ python manage.py migrate
Что это.
Выполнение миграций таким образом позволяет другим реализовать одни и те же миграции вместо того, чтобы вручную вводить изменения db на каждом компьютере с использованием кода. На новой машине все, что им нужно запустить, это:
$ python manage.py migrate