什么是Django的迁移?

时间:2017-08-20 16:44:03

标签: django django-migrations

我已经把这个概念包围了一会儿, 当我开始一个新的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上没有看到任何类似的问题,也许有比文档更好的解释。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

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

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

运行python manage.py migration将这些更改应用于数据库。

使用单独的命令进行迁移和应用迁移的原因是,您将迁移提交到版本控制系统,并将其与应用一起发布;它们不仅使您的开发更加轻松,而且还可以供其他开发人员和在生产环境中使用。