我有一个带有很多过时迁移的 Django 应用程序。 我想删除旧的迁移并重新开始。

该应用程序有 14 个不同的“迁移”文件夹。

以下是其中一些的样子:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

从每个文件夹中删除所有内容是否安全? 或者,我是否必须确保只删除一些文件——如果是这样,哪些文件?

#1楼 票数:13 已采纳

永远不应该在取消应用迁移之前删除它们,否则当你想要应用新的迁移时将是一场噩梦。

要取消应用迁移,您应该执行以下操作:

  1. 如果您想在 XXXX 迁移后取消应用迁移,请使用python manage.py migrate your_app_name XXXX 否则使用python manage.py migrate your_app_name zero来完全不应用所有迁移。

  2. 删除 /migrations/_ pycache _/ 下未应用的.pyc文件。

  3. 删除 migrations/ 下未应用的.py文件。

现在,您可以轻松创建新的迁移。

如果您希望将所有迁移合并为一个,请执行上述步骤删除所有迁移,然后运行python manage.py makemigrations your_app_name以创建单个迁移文件。 之后只需运行python manage.py migrate your_app_name就完成了。

#2楼 票数:5

那要看。 如果您有一个生产数据库(或任何您不能简单地删除和重新创建的数据库),那么答案是否定的,您不能安全地删除迁移。

如果您没有任何永久数据库,那么是的,您可以删除所有迁移,运行python manage.py makemigrations --initial它将根据您当前的模型创建新的迁移。

此外,您应该检查是否有任何迁移是手工编写的自定义数据迁移。 如果有的话,你可能想保留这些。

.pyc 文件通常可以安全删除,前提是相关的 .py 文件仍然存在。

您的第一个屏幕截图不是 Django,看起来像是某种 JS 项目。

#3楼 票数:2

  1. json 和 js 文件与 django 迁移以及 __pycache__ 文件夹无关。 您可以将它们全部删除。
  2. 如果你的意思是“以前应用,不再需要为项目只需要最新版本的迁移”你不想删除,但squash他们,而不是与squashmigrations您拥有的文件会减少两个,init文件和初始迁移文件,这样您的项目仍然有效。
  3. 如果通过删除意味着您不再需要它们,因为您已经对模型进行了如此多的更改,以至于以前的迁移甚至没有被使用,而是在从未使用过的情况下应用和未应用,没关系,请转到第 2 步并执行此操作而不是手动删除文件。 当您在应用程序上一一创建迁移时,您还创建了迁移依赖树,django 确实如此。 并且在某个时间点之后真的很难跟踪,如果您尝试删除所有内容,认为您可以轻松创建新的迁移文件,请相信我作为有其他经历的人,它不会像那样工作。 让 django 处理迁移压缩更简单,它优化了迁移,这意味着它还删除了最终状态中未使用的迁移。

更多阅读: https : //docs.djangoproject.com/en/2.2/topics/migrations/#migration-squashing

#4楼 票数:0

将先前提供的答案之一标记为已接受,以下是我学到的一些内容的摘要:

  • 删除 Django 迁移通常是一个坏主意
  • Django 通过这些迁移文件以及它在您的 db 中创建的表来跟踪您的数据库中的内容,如果您删除此 Django 中的任何一个,将开始在migrate时抛出错误,这些错误可能难以修复。

我遇到了一些难以修复的错误。 这是我为修复它所做的:

  • 在生产服务器上运行migrate
  • 当我遇到错误时,它会告诉我 db 如何与 Django 预期的不同步。 我通过使用 sql 客户端直接编辑数据库来手动更正。
  • 例如,如果它说一个不应该存在的键存在,我从指示的表中删除了相关的索引。
  • 或者,如果它说存在不应该存在的表,我将该表备份到一个文件,然后删除该表。 Migrate然后创建了表,然后我用备份中的数据重新填充它。
  • 在多对多表的情况下,一旦 Django 重新创建它们,我删除了所有新的 Django 创建的表,并从我本地开发系统上创建的备份中恢复它们,该系统已经拥有所有最新的迁移运行它。

最终我能够成功完成所有迁移。

我有一种感觉,我很幸运,上面的方法在所有情况下都不起作用! 我学到了很多关于 Django 和迁移的知识,将来会更加小心。

#5楼 票数:0

当您从第三个应用程序导入时:

有 2 步卸载它

例如,有使用“django_celery_beat”应用程序。

第一步:清洁桌子

python .\manage.py migrate django_celery_beat zero

步骤 2:从 INSTALLED_APPS 中删除应用程序

有做!!!

这是关于此的 Django文档

  ask by VikR translate from so

未解决问题?本站智能推荐:

1回复

Django没有检测到迁移的变化

我有一个 Django 应用程序,我将迁移文件夹添加到 gitignore 文件并进行了第一次迁移,然后我添加了一个字段用户模型并再次迁移。 所有迁移过程再次发生,但在迁移中 Django 没有应用更改。 我应该怎么做才能将我的更改应用到数据库,而不必将迁移文件夹推送到服务器
1回复

Djangomanage.py迁移验证错误

当我使用python manage.py migrate运行 django 时,我在运行python manage.py makemigrations后遇到以下错误 此错误的原因可能是什么以及如何解决此问题。 我正在使用 python 3.7 和 Django 2.2
1回复

ValueError:请将该函数移入主模块主体以使用迁移

我正在尝试修复的错误 ValueError :在posts.models中找不到函数func。 请注意,由于Python 2的限制,您无法序列化未绑定的方法函数(例如,在同一类主体中声明和使用的方法)。 请将该功能移至主模块主体以使用迁移。 有关更多信息,请参见https://doc
5回复

Django上的MakeMigration错误-ImportError:无法从“django.db.models”导入名称“FieldDoesNotExist”

添加新模型字段并运行 makemigrations 命令后,出现以下错误: 导入错误:无法导入名“FieldDoesNotExist”从“django.db.models”(/usr/local/lib/python3.7/site-packages/django/db/models/初始化的.py
1回复

django.db.utils.OperationalError:重复的列名:电子邮件

我想创建一个支持两种不同类型用户的 Django 应用程序。 为此,我首先通过继承 AbstractUser 扩展了我的用户。 有些字段对于我希望我的 Django 应用程序支持的两种类型的用户都是通用的,因此我将这些字段添加到扩展的用户模型中。 我的用户模型如下。 然后我进行迁移。 这是我在这个项
1回复

Django忽略模型字段

所以,我在做一个项目时遇到了这个。 我错误地在我的一个模型中的一个字段后面放置了一个“,”,Django 执行了所有迁移,同时忽略了该特定字段。 我花了一段时间才意识到,在字段负责我的字段没有反映在数据库中之后,有一点“,”。 但是,我知道不应该出现昏迷,但我有点期待 Django 给我一个错误或至
1回复

如何在不同的MySQL数据库和不同的DjangoApp之间建立连接或迁移?

我是Django的新手,非常感谢您的帮助。 请让我知道我在犯什么错误。 有人可以给我一个至少有2个应用程序和2个数据库的示例吗? 我的Django项目中有3个应用程序Cherry,Apple和Mango。 对于每个应用程序,都有“ models_cherry.py,models_apple.py和m
3回复

无法摆脱Django1.11中的“不存在的父节点”

到目前为止,我已经尝试过互联网为我解决的所有问题,但仍然没有解决。 Python 3.6.1-Django 1.11.2-virtualenv 我有一个带有两个app account和app2的django项目。 最近,随着项目的发展,我决定将它们拆分为更合适的应用程序。 现在我总共