TestCase检测DatabaseError:没有这样的列

时间:2011-11-16 06:55:25

标签: django django-models django-admin django-testing

我最近在我的某个模型中添加了一个新字段,忘了将相应的列添加到数据库中的表中。我有测试用例测试添加此模型的新实例并更改现有实例。这些测试用例都没有失败。然而,当我尝试使用实时网站更改实例时,我得到了

  

DatabaseError没有这样的列

我已经尝试过在TestCase中检测到这个错误,但没有运气。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

问题是你(我真的,真的希望)不要使用你的生产数据库进行测试,所以你可以检测到的是你的测试数据库中不存在该列,这可能是(推测)根据您的模型定义从头开始重新创建,而不是从生产数据库中删除该列。

解决此问题的更好方法是使用South之类的迁移工具,并自动执行部署过程,以便在部署新代码时运行迁移。

这仅适用于小型(ish)网站 - 如果您拥有高流量网站,您可能会发现天真地运行迁移会导致痛苦。如果您处于这种情况,您可能会发现David Cramer的write-up on schema changes信息丰富。

答案 1 :(得分:0)

不幸的是,使用syncdb命令不足以更新数据库。

您可以使用数据库管理系统手动插入字段,也可以使用South等解决方案。

答案 2 :(得分:0)

使用以下链接可以很好地解释您的问题。

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