一尘不染

更新Django数据库以反映现有模型中的更改

django

我已经定义了一个模型,并通过创建了它的关联数据库manager.py syncdb。现在,我已经向模型添加了一些字段,我syncdb再次尝试了,但是没有输出出现。尝试从模板访问这些新字段时,出现“ No Such Column”异常,使我相信syncdb实际上并未更新数据库。这里正确的命令是什么?


阅读 353

收藏
2020-03-30

共2个答案

一尘不染

似乎你需要的是迁移系统。South真的很棒,工作非常好,有一些自动化工具可以简化你的工作流程。

注意:syncdb无法更新你现有的表。有时候,无法自动决定要做什么-这就是为什么南方文字如此出色的原因。

2020-03-30
一尘不染

从Django 1.7+开始,内置迁移支持允许保留数据的数据库架构迁移。这可能是比下面的解决方案更好的方法。

另一个不需要其他应用程序的选项是使用内置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中将其删除)

2020-03-30