我已经定义了一个模型,并通过创建了它的关联数据库manager.py syncdb。现在,我已经向模型添加了一些字段,我syncdb再次尝试了,但是没有输出出现。尝试从模板访问这些新字段时,出现“ No Such Column”异常,使我相信syncdb实际上并未更新数据库。这里正确的命令是什么?
manager.py syncdb
似乎你需要的是迁移系统。South真的很棒,工作非常好,有一些自动化工具可以简化你的工作流程。
注意:syncdb无法更新你现有的表。有时候,无法自动决定要做什么-这就是为什么南方文字如此出色的原因。
从Django 1.7+开始,内置迁移支持允许保留数据的数据库架构迁移。这可能是比下面的解决方案更好的方法。
另一个不需要其他应用程序的选项是使用内置manage.py函数来导出数据,清除数据库并还原导出的数据。
manage.py
以下方法将为你的应用更新数据库表,但将完全破坏这些表中存在的所有数据。如果你对应用程序模型所做的更改没有破坏你的旧架构(例如,你添加了一个新的可选字段),则可以简单地先转储数据,然后再重新加载数据,如下所示:
Django 1.4.15及更早版本
python manage.py dumpdata <your_app> > temp_data.json python manage.py reset <your_app> python manage.py loaddata temp_data.json
Django 1.5及更高版本
python manage.py dumpdata <your_app> > temp_data.json python manage.py sqlclear <your_app> | python manage.py dbshell python manage.py syncdb python manage.py loaddata temp_data.json
(reset不建议使用该命令,然后在Django 1.5中将其删除)