2015-02-09 105 views
7

我个人喜欢django的MVC理想。但是,当我在版本1.7中运行Django迁移时,我在其中执行的每个迁移都存储在迁移目录中。如果我删除这些文件,它将在迁移时发生错误。我可以删除迁移目录中的django迁移文件吗

我测试过这样。我创建了一个新的Django项目并启动了一个git回购。我在Django中运行了3-4次迁移,导致迁移目录下有3-4个迁移文件。我试图删除旧的很迁移文件即(第一和第二迁移文件),并试图运行

python manage.py makemigrations 

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

我的问题是,如果一个人在开发过程中对数据库执行了大约50次更改,则所有迁移文件都存储在迁移目录中。是否有可能删除这些文件,并再次修改数据库,而不会中断?

+0

你对有您想了解应用的迁移现有的数据库开发?如果是这样,你不想删除这些模式。如果您使用syncdb从头开始创建新的数据库,那么您不需要任何旧的迁移。所以我认为答案是“取决于你的数据库设置” – 2015-02-09 07:20:14

+0

把我之前的评论换个角度来看,放弃你的50个迁移最简单的方法就是放弃数据库(它有50个迁移),并从头开始楷模。这对你来说是一种选择吗? – 2015-02-09 07:25:35

+1

我正在使用现有的数据库。所以如果我删除我的数据库然后我可以删除迁移文件是不是? – 2015-02-09 07:39:44

回答

7

答案是“视情况而定”。

如果您正在处理生产数据库或某些无法定期由于任何原因而被吹走的数据库,那么您绝对需要保留已应用于数据库的迁移文件。他们应该用代码的其余部分检入源代码控制。

现在,对于像你这样的情况,放弃50次迁移的最简单方法就是放弃db(以及50次迁移),并根据当前模型从头开始。在开发过程中随着模型的发展而定期做这件事通常是一个好主意。

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

删除已经应用到数据库的迁移文件通常不是很好,除非您要么完全吹掉数据库,要么2)首先恢复迁移。

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

0

如果你要保持你的数据库,但减少的迁移文件的数量,一个选择是压垮迁移成一个(或几个,如果复杂的依赖关系)移民。

从官方文档:

鼓励你做迁移自由,而不是担心你有多少;迁移代码经过优化,可一次处理数百个数据,而且速度不会太慢。但是,最终你会想从几百次迁移回到几次,这就是挤压进来的地方。

挤压之前,您应该知道,“在Django 模型的相互依存关系可以变得非常复杂,挤压可能会导致不运行迁移”,因此可能需要手动工作。

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