TestCase для обнаружения DatabaseError: такого столбца нет
Недавно я добавил новое поле в одну из моих моделей и забыл добавить соответствующий столбец в таблицу в базе данных. У меня есть тестовые случаи, которые тестируют добавление нового экземпляра этой модели и изменение существующего экземпляра. Ни один из этих тестов не удался. Тем не менее, когда я пытаюсь изменить экземпляр с живого сайта, я получаю
DatabaseError нет такого столбца
Я сделал несколько попыток обнаружить эту ошибку из TestCase, но не повезло.
Любая помощь с благодарностью.
3 ответа
Проблема в том, что вы (я действительно очень надеюсь) не используете свою производственную базу данных для тестирования, поэтому все, что вы можете обнаружить, это то, что столбец не существует в вашей тестовой базе данных, которая (предположительно) воссоздана с нуля. основываясь на определениях вашей модели, а не на том, что столбец отсутствует в вашей производственной базе данных.
Лучшим подходом к этой проблеме является использование инструмента миграции, такого как South, и автоматизация процесса развертывания, чтобы миграции выполнялись по мере развертывания нового кода.
Это будет работать только для небольших (ish) сайтов - вы можете обнаружить, что наивные миграции вызывают боль, если у вас есть сайт с большим трафиком. Если вы находитесь в такой ситуации, вы можете найти информацию Дэвида Крамера об изменениях схемы информативной.
К сожалению, используя syncdb
команды недостаточно для обновления базы данных.
Вы можете вставить поля вручную с помощью вашей системы управления базами данных или использовать решение, подобное South.
Используйте следующую ссылку это как очень хорошее объяснение вашей проблемы.
http://amionrails.wordpress.com/2013/11/17/django-databaseerror-no-such-column-error/