我已经定义了一个模型,并通过创建了它的关联数据库manager.py syncdb
。现在,我已经向模型添加了一些字段,我syncdb
再次尝试了,但是没有输出出现。尝试从模板访问这些新字段时,出现“ No Such Column”异常,使我相信syncdb实际上并未更新数据库。这里正确的命令是什么?
Answers:
从Django 1.7+开始,内置迁移支持允许保留数据的数据库架构迁移。这可能是比下面的解决方案更好的方法。
不需要其他应用程序的另一种选择是使用内置manage.py
函数来导出数据,清除数据库并还原导出的数据。
下面的方法将更新您的应用程序的数据库表,但将完全销毁这些表中存在的任何数据。如果您对应用程序模型所做的更改没有破坏您的旧模式(例如,您添加了一个新的可选字段),则可以简单地先转储数据,然后再重新加载数据,如下所示:
python manage.py dumpdata <your_app> > temp_data.json
python manage.py reset <your_app>
python manage.py loaddata temp_data.json
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中将其删除)
如果您的更改破坏了您的旧架构,则将无法使用-在这种情况下,South或Django Evolution这样的工具非常有用。
从Django 1.7开始,您现在可以通过本机迁移来做到这一点。赶紧跑
python manage.py makemigrations <your app name>
python manage.py migrate
deseb是实现这一目标的绝佳工具。
安装后,您可以编写./manage.py sqlevolve,它将生成使数据库结构与模型保持同步所需的sql命令。