如果我在一个Django模型更改字段,我怎么能与数据库中的表同步呢? 我需要做手工在数据库上还是有一个工具,做与过程帮助?
Answer 1:
唉,Django不支持任何简单的解决了这一点。
唯一的Django为你会做什么,是重新启动与匹配新模式,新表数据库:
$ #DON'T DO THIS UNLESS YOU CAN AFFORD TO LOSE ALL YOUR DATA!
$ python PROJECT_DIR/manage.py syncdb
下一个选项是使用不同的SQL *选项manage.py看什么的Django会做匹配当前模型到数据库,然后发出自己的ALTER TABLE
命令,使一切工作的权利。 当然,这是容易出错,很难。
真正的解决办法是使用一个数据库迁移工具,如南来生成迁移代码。
这里有一个类似的问题与有关Django的各种数据库迁移选项的讨论。
Answer 2:
似乎没有能够添加注释到标记的答案,可能是因为我没有足够的代表(是很好,如果SO这样跟我说,虽然)。
反正,只是想补充的是,在回答后,我认为这是错误的关于执行syncdb -执行syncdb 不接触表一旦被创建,并在其中有数据。 你不应该通过调用其数据丢失(否则,你怎么可以添加新表新的应用程序吗?)
我认为,海报是指复位命令来代替,这确实导致数据丢失-它会删除该表并重新创建它,因此它会拥有所有的最新模式的转变。
Answer 3:
Django的演变可以提供帮助,但最好的选择真的是要规划出您的模式提前,或手动进行简单的修改。 或者说,是愿意删除表和重新同步敬酒您的测试数据。
Answer 4:
Django不提供此开箱。
下面是来自Django的书上的一些信息做手工 (见在更改数据库模式)。 这适用于简单的,简单的更改。
从长期来看,你可能会想使用迁移工具。 主要有三种选择:
- Django的进化
- Dmigrations (由西蒙·威利森,Django会的创始人之一书面)(与MySQL只适用)
- 南
编辑:通过TokenMacGuy链接的问题来看,我将添加两个多到列表中的完整性的缘故:
- 洄游
- simplemigrations
Answer 5:
只是扔在一个额外的见解 - dmigrations是相当不错的,明确的使用,但我要说南是你最好的选择。 再次,这是很容易进入,但它的功能更强大,还拥有的不仅仅是更多的MySQL数据库后端的支持。 它甚至处理MSSQL,如果那是你的事