我最近在我的一个模型中添加了一个新字段,但忘记在数据库中的表中添加适当的列。我有测试用例来测试添加此模型的新实例并更改现有实例。这些测试用例都没有失败。然而,当我尝试使用实时站点更改实例时,我得到了
DatabaseError 没有这样的列
我已经尝试从 TestCase 中检测到这个错误,但没有这样的运气。
任何帮助是极大的赞赏。
我最近在我的一个模型中添加了一个新字段,但忘记在数据库中的表中添加适当的列。我有测试用例来测试添加此模型的新实例并更改现有实例。这些测试用例都没有失败。然而,当我尝试使用实时站点更改实例时,我得到了
DatabaseError 没有这样的列
我已经尝试从 TestCase 中检测到这个错误,但没有这样的运气。
任何帮助是极大的赞赏。
问题是您(我真的非常希望)不使用您的生产数据库进行测试,因此您所能检测到的只是您的测试数据库中不存在该列,该列(可能)是从头开始重新创建的基于您的模型定义,而不是生产数据库中缺少该列。
解决此问题的更好方法是使用像South这样的迁移工具,并自动化部署过程,以便在部署新代码时运行迁移。
这仅适用于小型(ish)站点 - 如果您有一个高流量的站点,您可能会发现天真地运行迁移会导致痛苦。如果您处于这种情况,您可能会发现 David Cramer关于架构更改的文章提供了丰富的信息。
使用以下链接很好地解释您的问题。
http://amionrails.wordpress.com/2013/11/17/django-databaseerror-no-such-column-error/
不幸的是,使用syncdb
命令不足以更新数据库。
您可以使用数据库管理系统手动插入字段,也可以使用South之类的解决方案。