【问题标题】:What is Django's migration?Django 的迁移是什么?
【发布时间】:2018-01-28 18:52:06
【问题描述】:

我一直在思考这个概念, 当我开始一个新的 django 项目时,它敦促我应用迁移:

# python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

为什么我需要这样做?谁能给一个简洁的解释和migration的简单用例?

编辑:我决定发布这个问题是因为我在 stackoverflow 上没有看到任何类似的问题,也许有比文档中更好的解释。

【问题讨论】:

标签: django django-migrations


【解决方案1】:

迁移是管理数据库架构更改的好方法。这有两个主要好处(在我看来):

1 - 如果您有一个应用程序的多个实例 - 开发 + 生产是典型的最小值,但可能是其他人安装的应用程序(独立或与其他 Django 应用程序一起),迁移允许您,开发人员,以安全可控的方式传播数据库架构更改。您可以保证您的应用程序的任何最新版本(即,包括您最新的数据库模型)都将有一个正常运行的数据库来匹配。所以一般的答案是,迁移以相对优雅的方式解决了一个非常常见的问题。

2 - 具体来说,正如另一个答案中所述,即使对于一个绝对全新的 Django 项目,也存在与用户和权限相关的初始迁移。我能想到的任何重要的 Django 应用程序都需要这些表才能运行——也就是说,如果你不使用它们,那么可以说你不会从 Django 作为框架提供的大部分东西中受益。通过包含迁移,您的开发人员可以决定使用哪个数据库(SQLite、MySQL、PostgreSQL 等)以及该数据库将驻留在哪里,一旦您进行了这些设置(通常在项目的 settings.py 中),迁移需要剩下的就交给你了。

【讨论】:

    【解决方案2】:

    这些迁移适用于 Django 默认创建的模型,例如用户、组和权限。

    如果您不打算使用它们,可以在设置中注释掉这些应用。否则,您需要运行这些迁移来为您的应用程序创建所需的表。

    【讨论】:

    • 我的意思是,为什么 django 不能自动执行此操作以减少用户的后顾之忧?还是因为无法事先确定型号名称?
    • 如果您想更改这些模型怎么办?它不能在不失去灵活性的情况下自动处理。
    • 记住 Django 是一个框架,而不是一个 CMS。如果您不想接触这些细节,那么 Django 不是正确的解决方案。
    【解决方案3】:

    migrate 命令获取所有尚未应用的迁移(Django 使用数据库中名为 django_migrations 的特殊表跟踪哪些迁移)并针对您的数据库运行它们 - 本质上,同步您对模型所做的更改与数据库中的架构。

    迁移功能非常强大,可让您在开发项目时随时间更改模型,而无需删除数据库或表并创建新的 - 它专门用于实时升级您的数据库,而不会丢失数据。我们将在本教程的后面部分更深入地介绍它们,但现在,请记住进行模型更改的三步指南:

    更改您的模型(在 models.py 中)。

    运行 python manage.py makemigrations 为这些更改创建迁移

    运行 python manage.py migrate 以将这些更改应用到数据库。

    使用单独的命令来创建和应用迁移的原因是,您需要将迁移提交到您的版本控制系统并随您的应用一起发布;它们不仅使您的开发更容易,而且还可供其他开发人员和生产环境使用。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2019-02-14
      • 2020-04-05
      • 2010-12-29
      • 2014-10-29
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多