我不小心删除了 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
这适用于 macOS。
如果您使用 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 中的迁移文件夹的主要内容,如果未能解决你的问题,请参考以下文章