django手动数据库迁移

问题描述 投票:0回答:2

我更喜欢在Django中手动迁移表。 因为使用自动化工具使我处于无法看到影响的地方。 具有影响力,是指数据库与模型同步所需的时间。 下面是一个简单的示例:

class User(models.Model):
   first_name = CharField(..)

假设我要添加以下内容:

class User(models.Model):
       first_name = CharField(..)
       last_name = CharField(..)

我将在生产服务器中执行以下步骤:

  1. 禁用网站流量。
  2. 手动连接到您的数据库服务器,假设是MySQL,并向User表中添加了一个名为last_name的字段(当然,请确保该字段与为新Model生成的SQL同步)。
  3. 更新您的模型。
  4. 上载新文件,重新启动流量。

对于这种情况,我有两个问题:

  1. 这是Django中手动数据库迁移的首选/可接受的方法吗?
  2. 如果我只是通过SQL手动将具有特定默认值的字段添加到User表中,但不更新模型,我是否还会收到DatabaseIntegrity异常?

提前致谢,

database django migration
2个回答
7
投票

通过使用所有架构迁移工具(例如south) ,可以显式定义如何迁移模型。 使用这样的工具的好处是:

  • 您的迁移存储在版本控制系统中
  • 有一个文档化的过程可以回滚架构迁移
  • 如果有其他开发人员加入您的项目,则可以将该人推荐给南方的文档,而不用说明您自己的hacky解决方案来记录架构迁移。

我想在这里只强调一点:尽管south具有自动迁移工具, 但如果使用South则不必使用自动迁移


0
投票

这是Django中手动数据库迁移的首选/可接受的方法吗?

我会回答不。 正如@Mike所说,Django有一个可靠且相当通用的迁移工具生态系统,其中最突出的是South。 @Mike的答案具有详细信息。

要回答第二个问题:

如果我只是通过SQL手动将具有特定默认值的字段添加到User表中,但不更新模型,我是否还会收到DatabaseIntegrity异常?

不会。您的模型将继续正常运行。 当然,如果您想使用Django的ORM对新字段进行处理,最好将它们添加到模型类中。

这样做的副作用是,可以通过有选择地选择要在模型中使用的字段来迁移旧数据库表。

© www.soinside.com 2019 - 2024. All rights reserved.