【问题标题】:Scaling or avoiding migrations when using Django 2.x?使用 Django 2.x 时缩放或避免迁移?
【发布时间】:2019-08-20 16:26:18
【问题描述】:

我刚刚开始我的 Django 框架之旅,我了解到 Django 开发人员已经从 2.0 版开始强制使用迁移。我可能是老派,但我喜欢我的数据库与我的代码分开。我一直将我的数据库与我的代码模型分开。我认为迁移不会随着工程团队的规模而扩展。

所以我的问题是 2 倍。

  1. 如果没有迁移,您能否不使用 Django 2.0,因为我认为它不能很好地扩展并且不适合 CI/CD 管道?
  2. 如果我们无法避免数据库迁移,那么我们如何将它们集成到强大的 CI/CD 管道中,在该管道中,来自不同团队的不同开发人员可以更改模型。

【问题讨论】:

  • 我不确定为什么您认为迁移对于大型团队来说是个问题。当然,使用多个分支时会有一些痛苦,this post 可能会有所帮助。此外,它还有助于经常压制迁移(让某人时不时地这样做)。但是如果你使用 git-flow 并让某人检查迁移合并(你经常会遇到依赖冲突,需要makemigrations merge),我看不出有什么大问题。

标签: django python-3.x django-migrations


【解决方案1】:

是的,你可以。您可以手动创建表并将 Django 设置为不管理您的表。

配置好 Django 项目后,只需在终端 python manage.py inspectdb > models.py 上运行,django 就会在配置的数据库中选择模型。如果您的项目将使用已经存在或遗留的数据库,这特别好

然后,您可以告诉 django 不要在模型的元选项上管理您的表:

class MyModel(models.Model):
    # your fields here

    class Meta:
       managed = False

See the docs here

但是,除非您有一个很好的方法来跟踪您的表更改,否则我必须说这是一个错误。 Django 迁移可帮助您跟踪模型的更改过程。如果您需要回滚或了解您的数据库历史记录,这真的很有帮助。

【讨论】:

  • 使用managed = False 使您的开发人员很难实际运行单元测试,因为他们必须在所有setUp 方法中创建表。可以为默认数据库设置database routerallow_migrate() 返回False,但我不确定。
  • 非常好,@dirkgroten。我解决了在 setUp() 上的模型 Meta 上更改 managed = True 的问题。不过,这很痛苦。
【解决方案2】:
  1. 迁移不是强制性的,不清楚您认为在 2.0 中发生了什么变化。

  2. 迁移适用于大型团队。如果你避开它们,你会让你自己和你的团队成员变得更加困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多