TestCase для обнаружения DatabaseError: такого столбца нет

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

DatabaseError нет такого столбца

Я сделал несколько попыток обнаружить эту ошибку из TestCase, но не повезло.

Любая помощь с благодарностью.

3 ответа

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

Лучшим подходом к этой проблеме является использование инструмента миграции, такого как South, и автоматизация процесса развертывания, чтобы миграции выполнялись по мере развертывания нового кода.

Это будет работать только для небольших (ish) сайтов - вы можете обнаружить, что наивные миграции вызывают боль, если у вас есть сайт с большим трафиком. Если вы находитесь в такой ситуации, вы можете найти информацию Дэвида Крамера об изменениях схемы информативной.

К сожалению, используя syncdb команды недостаточно для обновления базы данных.

Вы можете вставить поля вручную с помощью вашей системы управления базами данных или использовать решение, подобное South.

Используйте следующую ссылку это как очень хорошее объяснение вашей проблемы.

http://amionrails.wordpress.com/2013/11/17/django-databaseerror-no-such-column-error/

Другие вопросы по тегам