我更喜欢在Django中手动迁移表。 因为使用自动化工具使我处于无法看到影响的地方。 具有影响力,是指数据库与模型同步所需的时间。 下面是一个简单的示例:
class User(models.Model):
first_name = CharField(..)
假设我要添加以下内容:
class User(models.Model):
first_name = CharField(..)
last_name = CharField(..)
我将在生产服务器中执行以下步骤:
对于这种情况,我有两个问题:
提前致谢,
通过使用所有架构迁移工具(例如south) ,可以显式定义如何迁移模型。 使用这样的工具的好处是:
我想在这里只强调一点:尽管south具有自动迁移工具, 但如果使用South则不必使用自动迁移 。
这是Django中手动数据库迁移的首选/可接受的方法吗?
我会回答不。 正如@Mike所说,Django有一个可靠且相当通用的迁移工具生态系统,其中最突出的是South。 @Mike的答案具有详细信息。
要回答第二个问题:
如果我只是通过SQL手动将具有特定默认值的字段添加到User表中,但不更新模型,我是否还会收到DatabaseIntegrity异常?
不会。您的模型将继续正常运行。 当然,如果您想使用Django的ORM对新字段进行处理,最好将它们添加到模型类中。
这样做的副作用是,可以通过有选择地选择要在模型中使用的字段来迁移旧数据库表。