我正在考虑将Django用于我要开始的项目(fyi,一个基于浏览器的游戏),而我最喜欢的功能之一就是syncdb根据我定义的Django模型自动创建数据库表(我似乎在其他任何框架中都找不到的功能)。当我在文档中看到此内容时,我已经认为这太好了,无法实现:
syncdb
Syncdb不会更改现有表
syncdb将仅为尚未安装的模型创建表。安装后,它将永远不会发出ALTER TABLE语句来匹配对模型类所做的更改。对模型类和数据库模式的更改通常涉及某种形式的歧义,在这种情况下,Django必须猜测要进行的正确更改。在此过程中可能会丢失关键数据。
如果你对模型进行了更改,并且希望更改数据库表以使其匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以得出更改。
似乎更改现有表将必须“手动”完成。
我想知道的是最好的方法。有两种解决方案:
手动执行SQL更改和转储/重新加载都是两个选项,但是你可能还想签出一些Django的schema-evolution程序包。最成熟的选择是django-evolution和South。
更新:自从最初编写此答案以来,django-evolution和dmigrations均已停止积极开发,而South已成为Django中架构迁移的实际标准。在下一两个版本中,South的某些部分甚至可以集成到Django中