【发布时间】:2009-07-12 03:21:13
【问题描述】:
如果我更改了 Django 模型中的字段,如何将其与数据库表同步?我是否需要在数据库上手动执行此操作,或者是否有工具可以帮助完成此过程?
【问题讨论】:
标签: python database django django-models synchronization
如果我更改了 Django 模型中的字段,如何将其与数据库表同步?我是否需要在数据库上手动执行此操作,或者是否有工具可以帮助完成此过程?
【问题讨论】:
标签: python database django django-models synchronization
唉,Django 不支持任何简单的解决方案。
django 唯一能为您做的就是使用与您的新模型匹配的新表重新启动您的数据库:
$ #DON'T DO THIS UNLESS YOU CAN AFFORD TO LOSE ALL YOUR DATA!
$ python PROJECT_DIR/manage.py syncdb
下一个选项是使用各种 sql* 选项来管理.py 以查看 django 将如何将当前模型与数据库匹配,然后发出您自己的 ALTER TABLE 命令以使一切正常。当然,这是容易出错且困难的。
真正的解决方案是使用数据库迁移工具,如south,生成迁移代码。
这是similar question,讨论了 django 的各种数据库迁移选项。
【讨论】:
似乎无法为标记的答案添加评论,可能是因为我没有足够的代表(如果 SO 告诉我的话,那就太好了)。
无论如何,只是想在已回答的帖子中添加这一点,我认为 syncdb 是错误的 - 一旦创建了表并在其中包含数据,syncdb 不会不触摸表。您应该不通过调用它来丢失数据(否则,您如何为新应用添加新表?)
我相信张贴者指的是重置命令,确实会导致数据丢失 - 它会删除表并重新创建它,因此它将具有所有最新的模型更改。
【讨论】:
Django Evolution 可以提供帮助,但最好的选择实际上是提前计划好您的模式,或者手动进行简单的修改。或者,愿意通过删除表并重新同步来为您的测试数据干杯。
【讨论】:
Django 不提供开箱即用的功能。
这是来自doing it by hand 上的 Django Book 的一些信息(请参阅对数据库模式进行更改)。这适用于直接、简单的更改。
从长远来看,您可能希望使用迁移工具。主要有以下三种选择:
编辑:查看 TokenMacGuy 链接的问题,为了完整起见,我将在列表中添加两个:
【讨论】:
只是提出一个额外的意见 - dmigrations 非常好用且易于使用,但我会说 South 是你最好的选择。同样,它很容易上手,但它更强大,并且支持更多的数据库后端,而不仅仅是 MySQL。它甚至可以处理 MSSQL,如果那是你的事
【讨论】: