Django重命名并更改模型字段的数据类型,零停机时间?

时间:2010-02-18 23:45:55

标签: django django-models

我在生产应用程序中使用了django模型,我需要更改该字段的名称和数据类型,并且停机时间为零。所以这就是我的计划:

1)在数据库中创建将替换原始字段的新字段
2)每次加载模型的实例时,将数据转换为原始字段并将其存储到新字段中,然后保存对象(仅当新字段为空时才保存对象)
3)随着时间的推移,一旦每个对象都有一个非空白的新字段,就可以删除原始字段

第二步我也可以附加什么方法?

3 个答案:

答案 0 :(得分:2)

首先,您是否必须更改业务逻辑(可能还有模板)才能容纳新的字段名称? 除非在代码中的许多位置将内容分配给相关字段,否则您可以(在数据库中创建字段之后)

1)调整代码以识别旧(读)和新字段(名称)s(写) 2)通过锁定/ .update()调用等将数据库中的数据从旧字段更改为新字段 3)完全从模型/视图/模板中删除旧字段(名称)

如果没有停机时间,我看不到您网站的用户如何在几秒钟内获得“旧”值(取决于表中的行数,重新计算到新数据类型的成本等等)。 )。

答案 1 :(得分:1)

听起来很复杂,影响了很多生产代码。

您是否因为停机而试图避免批量执行此操作?您使用了多少数据?

你看过那里的任何Django迁移工具吗?南是一个非常受欢迎的:

http://south.aeracode.org/

答案 2 :(得分:0)

因为你似乎无法承受任何停机时间(我不想要你的工作!!!)你可能不想冒险覆盖模型的构造方法。您可以尝试的是捕获初始化后信号......

https://docs.djangoproject.com/en/1.0/ref/signals/#django.db.models.signals.post_init