【问题标题】:django migrate "No migrations to apply."django migrate “没有要应用的迁移。”
【发布时间】:2018-10-24 17:43:48
【问题描述】:

我有点知道为什么当我执行migrate 时,它会给我no migrations to apply 的消息,但我只是不知道如何解决它

这就是发生的事情。

我在模型字段中添加了一个名为 update 的新字段。 我做了一个migration,它创建了一个名为0003_xxxxx.py 的文件,然后我做了一个migrate,现在效果很好。

但是由于某种原因,我必须从同一模型中删除 update 字段。 所以我删除了它(更像是评论而不是真正删除代码)然后我做了migrationmigrate 删除了db中的字段。 (创建0004_xxxxx.py

但是叹息....出于某种原因,我必须再次添加该字段(这就是我只注释掉的原因)但是在我执行 migration 之前 我删除了0003_xxxx.py and 0004_xxxx.py 文件我想删除这两个文件,因为这实际上与0003_xxxx.py 相同或几乎相同的配置,所以我觉得在这里拥有0003_xxxx.py and 0004_xxxx.py 毫无意义……当我开始生产时,那就是只是 python 运行的另一个额外步骤。

删除这两个文件后,我执行了migration,它创建了另一个0003_xxxx.py,但是当我执行migrate 时,它给了我no migrations to apply 的消息

我知道通过删除 0003_xxxx.py 并取回原来的 0003 and 0004 然后再做一个 migration (creates 0005_xxxx.py) then migrate 然后将进行更改。我知道这一点是因为我并没有真正删除原来的0003 and 0004,我把它移到了某个地方以防万一发生这种情况。

但是为什么会这样呢?有没有办法解决它?

提前感谢您的任何回复

【问题讨论】:

    标签: python django migration database-migration


    【解决方案1】:

    运行:

    python manage.py run --run-syncdb
    

    【讨论】:

      【解决方案2】:

      或者甚至只是从数据库中删除最后一个迁移行,您可以尝试以下操作

      首先,检查你要删除哪一行

      SELECT * FROM "public"."django_migrations";
      

      现在从上面的查询中选择最后一个id 并执行

      DELETE FROM "public"."django_migrations" WHERE "id"=replace with your Id;
      

      运行./manage.py migrate

      【讨论】:

        【解决方案3】:

        django 在您的数据库中按表django_migrations 记录当前migrations 日志。

        类似:

        迁移是一个链式结构,它依赖于父节点。通过这个表django可以知道执行了哪个迁移文件。

        在您的情况下,no migrations to apply 因为新创建的0003_xxxx.py 记录在此表中,您可以通过删除此表中的记录来修复它。

        如果您想删除一些迁移文件,您需要查看Squashing migrations

        【讨论】:

        • 所以这意味着,我需要像..manage.py squashmigrations myapp 0003 这样运行压缩命令?然后再次运行migration 以创建一个新的0003 以便正确migrate
        • 在此之前您需要删除表 django_migrations 中的记录 003 004
        • 该死,这意味着 db 中的 id 不会是连续的并且消失了......但最终我在 django_migrations 中删除了它们我不需要做 sqashmigrations 并且它仍然有效因为我尝试使用 squashmigrations app_name 0003 它说没有迁移匹配
        • sqashmigrations 用于将多个迁移文件设置为一个,这不是必须做的事情。
        • 这意味着如果有人说创建了大约 100 个迁移文件,我可以 sqashmigrations 将它们合并到一个文件 0001.py
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2019-02-13
        • 2017-06-24
        • 1970-01-01
        • 2020-01-31
        • 2016-04-14
        • 2021-05-04
        相关资源
        最近更新 更多