我个人喜欢django的MVC理念。但是,当我在版本1.7中运行Django迁移时,我在其中所做的每一个迁移都存储在迁移目录中。如果我删除这些文件,它将在迁移时抛出一个错误。
我是这样测试的。我创建了一个新的Django项目并启动了一个git。我在Django中运行了一些3-4迁移,这导致了迁移目录下的3-4个迁移文件。我尝试删除非常旧的迁移文件,即第1和第2迁移文件,并尝试运行
python manage.py makemigrations
这确实会导致一些错误,如“未找到迁移文件”。后来,我做了一个git存储,恢复了已删除的文件。现在,我试图再次运行相同的命令,它运行良好。
我的问题是,如果一个人在开发期间运行大约50个db更改,那么所有迁移文件都存储在迁移目录中。是否可以删除这些文件并在不中断的情况下再次对数据库进行更改?
发布于 2015-02-09 20:05:08
答案是“视情况而定”。
如果您使用的是一个生产数据库,或者某个由于任何原因无法定期消失的DB,那么您绝对希望保留应用到您的DB中的迁移文件。它们应该与您的其余代码一起签入源代码管理。
现在,对于像您这样的情况,抛弃您的50个迁移的最简单的方法是将db (它是50个迁移)吹掉,然后从零开始,考虑到您当前的模型。在开发过程中定期开发模型时,定期这样做通常是个好主意。
当您将DB吹走时,可以将您的模型吹走,因为syncdb将使用您当前的模型构建一个空白数据库。然后,它可以选择使用任何初始的固定装置填充db。从概念上讲,在这种情况下,您不再需要迁移任何东西,因此您不需要为旧数据库保留旧迁移。它们已不再具有相关性。
删除应用于您的DB的迁移文件通常是不好的,除非您是( 1)将DB完全吹走,或者( 2)首先恢复迁移。
您可能还会意识到,当您将迁移应用到db时,它也会将这些迁移记录在数据库本身的一个特殊表中。这就是为什么当您只删除迁移文件时,事情会变得混乱。它们必须与迁移表保持同步。
发布于 2017-05-14 20:16:39
--如果希望保留DB,但减少迁移文件的数量,一个选项是将迁移压缩为一个(或少数,如果是复杂的依赖项)迁移。
从正式文件中:
我们鼓励您自由地进行迁移,而不必担心有多少迁移;迁移代码是经过优化的,一次可以处理数百个,而不会有太多的放缓。然而,最终您会想要从几百次迁移迁移到几次迁移,而这就是挤压的原因。
在压缩之前,您应该意识到“Django中的模型相互依赖关系可能变得非常复杂,压缩可能导致不运行的迁移”,因此可能需要手工操作。
有关如何进行压缩的详细信息,请参阅docs:https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations。
发布于 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.
https://stackoverflow.com/questions/28404461
复制相似问题