首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以删除迁移目录中的django迁移文件吗?

我可以删除迁移目录中的django迁移文件吗?
EN

Stack Overflow用户
提问于 2015-02-09 07:06:37
回答 6查看 19.8K关注 0票数 11

我个人喜欢django的MVC理念。但是,当我在版本1.7中运行Django迁移时,我在其中所做的每一个迁移都存储在迁移目录中。如果我删除这些文件,它将在迁移时抛出一个错误。

我是这样测试的。我创建了一个新的Django项目并启动了一个git。我在Django中运行了一些3-4迁移,这导致了迁移目录下的3-4个迁移文件。我尝试删除非常旧的迁移文件,即第1和第2迁移文件,并尝试运行

代码语言:javascript
运行
复制
python manage.py makemigrations

这确实会导致一些错误,如“未找到迁移文件”。后来,我做了一个git存储,恢复了已删除的文件。现在,我试图再次运行相同的命令,它运行良好。

我的问题是,如果一个人在开发期间运行大约50个db更改,那么所有迁移文件都存储在迁移目录中。是否可以删除这些文件并在不中断的情况下再次对数据库进行更改?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-09 20:05:08

答案是“视情况而定”。

如果您使用的是一个生产数据库,或者某个由于任何原因无法定期消失的DB,那么您绝对希望保留应用到您的DB中的迁移文件。它们应该与您的其余代码一起签入源代码管理。

现在,对于像您这样的情况,抛弃您的50个迁移的最简单的方法是将db (它是50个迁移)吹掉,然后从零开始,考虑到您当前的模型。在开发过程中定期开发模型时,定期这样做通常是个好主意。

当您将DB吹走时,可以将您的模型吹走,因为syncdb将使用您当前的模型构建一个空白数据库。然后,它可以选择使用任何初始的固定装置填充db。从概念上讲,在这种情况下,您不再需要迁移任何东西,因此您不需要为旧数据库保留旧迁移。它们已不再具有相关性。

删除应用于您的DB的迁移文件通常是不好的,除非您是( 1)将DB完全吹走,或者( 2)首先恢复迁移。

您可能还会意识到,当您将迁移应用到db时,它也会将这些迁移记录在数据库本身的一个特殊表中。这就是为什么当您只删除迁移文件时,事情会变得混乱。它们必须与迁移表保持同步。

票数 14
EN

Stack Overflow用户

发布于 2017-05-14 20:16:39

--如果希望保留DB,但减少迁移文件的数量,一个选项是将迁移压缩为一个(或少数,如果是复杂的依赖项)迁移。

从正式文件中:

我们鼓励您自由地进行迁移,而不必担心有多少迁移;迁移代码是经过优化的,一次可以处理数百个,而不会有太多的放缓。然而,最终您会想要从几百次迁移迁移到几次迁移,而这就是挤压的原因。

在压缩之前,您应该意识到“Django中的模型相互依赖关系可能变得非常复杂,压缩可能导致不运行的迁移”,因此可能需要手工操作。

有关如何进行压缩的详细信息,请参阅docs:https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations

票数 1
EN

Stack Overflow用户

发布于 2018-03-20 08:40:13

答案是"Do not delete migration files".来理解为什么我们不应该删除迁移文件,您需要了解迁移是如何在框架中工作的。迁移文件是数据库的历史记录。一个迁移文件是基于过去创建的迁移文件创建的。删除迁移文件意味着丢失历史记录。此历史信息记录在数据库中的django_migrations表中。如果删除迁移文件,将得到依赖项错误。所以Don't try to lose your history by deleting your migration files.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28404461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档