【发布时间】:2018-03-28 02:51:34
【问题描述】:
我已经使用 Django 大约 2 年了,有一个我一直害怕使用的功能:伪造迁移。
我几乎到处都看过,我能得到的最多信息来自documentation,它指出:
--假的
告诉 Django 将迁移标记为已应用或 未应用,但没有实际运行 SQL 来更改您的 数据库架构。
这是供高级用户操作当前 如果他们手动应用更改,则直接迁移状态;是 警告使用 --fake 会冒着迁移状态的风险 表进入需要手动恢复的状态 迁移运行正常。
--fake-initial
如果所有数据库都允许 Django 跳过应用程序的初始迁移 具有由所有 CreateModel 创建的所有模型的名称的表 该迁移中的操作已经存在。此选项旨在 用于第一次对数据库运行迁移时使用 预先存在迁移的使用。但是,此选项不检查 用于匹配表名之外的匹配数据库模式等 只有当您确信您现有的架构时才能安全使用 与您初始迁移中记录的内容相匹配。
我大致了解了为什么要使用此功能。但是,我不明白它说这是仅供高级用户使用的部分。
谁能解释幕后发生的事情以及为什么需要手动恢复。
注意
我不是在寻找在伪造迁移时运行的确切原始 SQL 查询。我只是在寻找幕后发生的事情的一般概念,也许是一个为什么假装迁移的例子
将导致makemigrations 无法正常工作的状态。
【问题讨论】:
-
我认为值得一提的是,当您运行
--fake时,是否将迁移标记为已应用,在django_migrations表中定义,Django 跟踪应用程序的所有已应用迁移,其中迁移文件的name以及应用的时间。我花了一段时间才弄清楚这一点,因为文档并不清楚我在这里介绍的这个细节。
标签: django django-models django-migrations