python - 我可以删除迁移目录中的 django 迁移文件吗

标签 python django django-migrations

我个人喜欢 Django,因为它的 MVC 理念。但是,当我在 1.7 版中运行 Django 迁移时,我在其中执行的每个迁移都存储在迁移目录中。如果我删除这些文件,它会在迁移时引发错误。

我是这样测试的。我创建了一个新的 Django 项目并启动了一个 git repo。我在 Django 中运行了 3-4 次迁移,结果是 migrations目录下有3-4个迁移文件。我尝试删除非常旧的迁移文件,即(第一个和第二个迁移文件)并尝试运行

python manage.py makemigrations

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

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

最佳答案

答案是“视情况而定”。

如果您使用的是生产数据库,或者某些由于任何原因不能定期删除的数据库,那么您绝对希望保留已应用于数据库的迁移文件。它们应该与您的其余代码一起检入源代码管理。

现在,对于像您这样的情况,放弃 50 次迁移的最简单方法是直接清除数据库(这是 50 次迁移)并根据您当前的模型从头开始。在开发过程中改进模型时,定期执行此操作通常是个好主意。

当你摧毁你的数据库时,摧毁你的模型是可以的,因为 syncdb 将使用你当前的模型构建一个空白数据库。然后它会选择性地使用任何初始固定装置填充数据库。从概念上讲,此时您已不再迁移任何内容,因此您无需保留旧数据库的旧迁移。它们不再相关。

删除已应用于您的数据库的迁移文件通常不好,除非您 1) 完全清除数据库,或 2) 首先恢复迁移。

当您将迁移应用到数据库时,您可能还会很高兴知道它还会将这些迁移记录在数据库本身的一个特殊表中。这就是为什么当您删除迁移文件时事情会变得一团糟。他们必须与迁移表保持同步

关于python - 我可以删除迁移目录中的 django 迁移文件吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404461/

相关文章:

python - 我怎样才能简化这个Python语句

Django电子邮件摘要

Heroku 中的 Django 迁移失败

python - 在python中定义一个属性

python - numpy 类型字符串中的 "|"是什么意思?

python - Scrapy解释提取的html实体

mysql - 运行显式创建表的迁移时未创建 Django 表。

python - Python os.popen : How to ensure popen(…) has completed execution before continuing?

django - 如何配置 Haystack/Elasticsearch 以处理单词开头附近的缩写和撇号

python - 修复在 Django1.9 中检测到的迁移冲突