我有一个项目,现有的班级模型为
class Disability(models.Model):
child = models.ForeignKey(Child,verbose_name=_("Child"))
但是随着最近的架构变更,我必须将其修改为
class Disability(models.Model):
child = models.ManyToManyField(Child,verbose_name=_("Child"))
现在为这个新的改变..(甚至我必须修改新的现有数据库) 我想数据迁移是最好的方法,而不是手动完成。
我提到了这个在线文档
http://south.readthedocs.org/en/latest/commands.html#commands-datamigration
但它对数据迁移的关注度很低。以及有关模式迁移的更多信息。
问题1。如果我进行模式迁移,这将使我放弃所有属于旧模型的先前数据。 问题2。即使我想进行架构迁移,也要问这个...... (rats)rats@Inspiron:~/profoundis/kenyakids$ ./manage.py schemamigration web --auto
? The field 'Disability.child' does not have a default specified, yet is NOT NULL.
? Since you are removing this field, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
? 3. Disable the backwards migration by raising an exception.
? Please select a choice: 1
任何人都可以解释架构和数据迁移之间的概念和区别,以及如何单独实现这一点。
答案 0 :(得分:3)
架构和数据迁移不是用于修改表结构的不同选项。它们是完全不同的东西。当然,数据迁移是fully described in the South docs。
此处数据迁移对您没有帮助,因为您需要修改架构。南方和其他迁移系统的重点在于它们允许您在不丢失数据的情况下执行此操作。
答案 1 :(得分:1)
old_table - >克隆 - > tmp_table的强>
old_table - >重组
tmp_table.data - >表强>
南方将查看字段类型。如果发生重大变化,它会询问该怎么做。例如,将文本字段转换为int字段将很难转换:)
移动数据始终是一个问题,因为您可能会更改表结构和字段类型。例如,如何手动处理Char(max_length = 100)到Char(max_length = 50)的数据?
最好的建议是保持良好的备份。 还可以利用djangos灯具。您可以保存不同数据结构的夹具以及南迁移。
South将以与syncdb相同的方式加载initial_data文件,但它 在每个成功的迁移过程结束时加载它们
http://south.readthedocs.org/en/latest/commands.html#initial-data-and-post-syncdb