Django:安全地删除旧的迁移?

7kjnsjlb  于 2022-12-20  发布在  Go
关注(0)|答案(6)|浏览(281)

我有一个Django应用程序,其中有很多过期的迁移。我想删除旧的迁移并重新开始。
该应用程序有14个不同的“迁移”文件夹。
下面是其中一些的样子:

从每个文件夹中删除 * 所有 * 内容安全吗?或者,我必须确保只删除 * 部分 * 文件吗?如果是,删除哪些文件?

kx7yvsdv

kx7yvsdv1#

您应该永远不要在取消应用迁移之前删除它们,否则当您要应用新迁移时,这将是一场噩梦。
要取消应用迁移,应执行以下操作:
1.如果要在XXXX迁移后取消应用迁移,请使用python manage.py migrate your_app_name XXXX。否则,请使用python manage.py migrate your_app_name zero完全取消应用所有迁移。
1.删除/migrations/pycache/下未应用的.pyc文件。
1.删除migrations/下未应用的.py文件。
现在,您可以创建新的迁移,而不会遇到任何麻烦。
如果你想把所有的迁移压缩到一个文件中,那么按照上面的步骤删除所有的迁移,然后运行python manage.py makemigrations your_app_name创建一个迁移文件,然后运行python manage.py migrate your_app_name就可以了。

li9yvcax

li9yvcax2#

如果您有一个生产数据库(或者任何您不能简单地删除和重新创建的数据库),那么答案是否定的,您不能安全地删除迁移。
如果您没有任何永久数据库,那么是的,您可以删除所有迁移,运行python manage.py makemigrations --initial,它将基于您当前的模型创建新的迁移。
此外,您还应该检查是否有任何迁移是手工编写的自定义数据迁移。如果有,您可能希望保留这些迁移。
如果相关的.py文件仍然存在,通常可以安全地删除.pyc文件。
你的第一个截图不是Django,看起来像是某种JS项目。

9udxz4iz

9udxz4iz3#

  1. json和js文件和__pycache__文件夹都和django迁移无关,你可以把它们全部删除。
    1.如果你的意思是“以前应用过,不再需要,因为项目只需要最新版本的迁移”,你不想删除,而是用squashmigrations将它们删除,这样你的文件就减少到两个,init文件和初始迁移文件,这样你的项目仍然可以工作。
    1.如果删除意味着您不再需要这些文件,因为您已经对模型进行了大量更改,以前的迁移除了应用和未应用但从未使用之外,甚至都没有使用过,**也没关系,请转到步骤2并执行此操作,而不是手动删除这些文件。**当您在应用程序上逐个创建迁移时,您还创建了迁移依赖关系树,django是这样的。而且在某个时间点之后很难跟踪,如果你试图删除所有的东西,以为你可以轻松地创建新的迁移文件,相信我,作为一个有经验的人,它不是这样工作的。让django处理迁移压缩要简单得多,它优化了迁移,这意味着它也删除了最终状态下未使用的迁移。
    更多信息请访问:https://docs.djangoproject.com/en/2.2/topics/migrations/#migration-squashing
kupeojn6

kupeojn64#

在将之前提供的一个答案标记为被接受之后,下面是我学到的几件事的总结:

  • 删除Django迁移通常是一个坏主意
  • Django通过这些迁移文件,以及它在你的数据库中创建的一个表来跟踪你的数据库中有什么,如果你删除了其中的任何一个,Django将开始在migrate上抛出错误,这可能很难修复。

我遇到了一些很难修复的错误。下面是我修复它的方法:

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

最终我成功地完成了所有迁移。
我有一种感觉,我很幸运,上面的方法并不适用于所有的情况!我已经学到了很多关于Django和迁移的知识,将来会更加小心。

e0bqpujr

e0bqpujr5#

从第三个应用程序导入时:
卸载它有2个步骤
例如,可以使用'django_celery_beat'应用程序。

第1步:清洁扫描床

python .\manage.py migrate django_celery_beat zero

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

有做!!!
我是 Django document

wrrgggsh

wrrgggsh6#

如何重置迁移

如果你正在使用linux/unix操作系统,那么你可以激发这个命令。删除所有迁移目录。

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete

相关问题