我不小心删除了 Django 中的迁移文件夹

Posted

技术标签:

【中文标题】我不小心删除了 Django 中的迁移文件夹【英文标题】:I accidentally deleted the migrations folder in Django 【发布时间】:2020-06-16 16:24:35 【问题描述】:

我使用 Django 和 Postgre 作为数据库。所以我完成了所有迁移,但后来我不小心删除了编辑器中的迁移文件夹。因此,我在终端中再次执行了“python manage.py makemigrations”,希望可以取回该文件夹,但它回答“未检测到更改”。我应该怎么做才能找回文件夹?只是简单地再次进行迁移是错误的吗? 我尝试创建一个新数据库并重新执行相同的过程,但它仍然显示“未检测到更改。”

非常感谢您的帮助。 :)

【问题讨论】:

你使用哪个 IDE? @kamilyrb 我使用 Microsoft Visual Studio。 你试过选择文件树然后按 ctrl + z FWIW,这就是您使用 版本控制系统 的目的,其次是计算机备份…… ***.com/questions/36153748/… 【参考方案1】:

如果您已删除所有迁移,则必须重置迁移并重新创建。不用担心,您的数据库会很安全。 如果您想在不丢失数据库的情况下修复迁移,请按照以下步骤操作。

首先清除数据库迁移历史记录。

一个。转到python shell python manage.py shell

b.输入from django.db.migrations.recorder import MigrationRecorder

c。输入MigrationRecorder.Migration.objects.all().delete()

其次,重新创建迁移

创建一个新文件夹migrations。 在文件夹中创建一个名为__init__.py 的文件。

运行命令python manage.py makemigrations

应用虚假迁移,以便您的数据库架构和迁移历史同步。

python manage.py migrate --fake

【讨论】:

做了步骤,还是和上次一样。 我收到“未检测到更改” 你检查过你的 django_migrations 表是空的吗?> 我在***.com/questions/36153748/…找到了解决方案【参考方案2】:

我发现this recipe (Scenario 2, to keep the existing development DB) 效果很好。它可以应用于单个应用程序,这可能比一次重置所有应用程序上的迁移更棘手。

【讨论】:

没用。每次都获得“未检测到更改”。我尝试了不同的场景。删除“db.sqlite3”的那个,我不推荐使用,除非你创建一个新的超级用户没有问题,因为它会删除它。【参考方案3】:

我现在在Django - makemigrations - No changes detected找到了解决方案

解决办法是:

python3 manage.py makemigrations yourAppName

这适用于 ma​​cOS

如果您使用 Windows,可能

py manage.py makemigrations yourAppName

并且“yourAppName”应该是您的应用程序的名称,与示例中的不同,只有当您的应用程序名称实际上是“yourAppName”时,那当然可以。

【讨论】:

【参考方案4】:

删除迁移文件夹下的所有内容

然后输入以下命令

python manage.py makemigrations

【讨论】:

【参考方案5】:

尝试以下步骤:

    清除pyc缓存:运行python manage.py clear_pyc 如果旧的迁移文件夹被删除,则创建新的迁移文件夹并在其中创建一个__init__.py 文件 通过运行python manage.py makemigrations <your-app-name> 再次创建迁移

就像您将恢复已删除的迁移一样,因为您可以通过运行 python manage.py migrate 来迁移所有内容

【讨论】:

以上是关于我不小心删除了 Django 中的迁移文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8:删除迁移文件夹后未检测到迁移

Django 删除了迁移目录

Django 1.7 迁移不会重新创建删除的表,为啥?

关于Django中的迁移文件

关于Django中的迁移文件

为现有的 django 模式重新创建数据库