我更喜欢在Django中手动迁移我的表。因为使用自动化工具会让我无法看到影响。有了影响,我的意思是db与我的模型同步所花费的时间。以下是一个简单的例子:
class User(models.Model):
first_name = CharField(..)
假设我想补充一下:
class User(models.Model):
first_name = CharField(..)
last_name = CharField(..)
我将在生产服务器中执行以下步骤:
我对这个场景有两个问题:
提前致谢,
答案 0 :(得分:7)
使用所有架构迁移工具(例如south),有一些方法可以明确定义模型的迁移方式。使用诸如此类工具的好处是:
我想我应该在这里强调一点:虽然南方有自动迁移工具,如果你使用南方,你不必使用自动迁移。
答案 1 :(得分:0)
这是Django中手动数据库迁移的首选/可接受方式吗?
我会回答不。正如@Mike所说,Django拥有一个可靠且相当多功能的迁移工具生态系统,其中最突出的是南方。 @ Mike的答案有正确的细节。
回答你的第二个问题:
如果我只是通过SQL手动将具有特定默认值的字段添加到User表中,但是不更新模型,我是否还会获得DatabaseIntegrity异常?
没有。您的模型将继续正常运行。当然,如果您想使用Django的ORM对新字段进行某些操作,最好将它们添加到模型类中。
这样做的副作用是您可以通过有选择地选择要在模型中使用的字段来迁移旧数据库表。