2016-11-25 75 views
2

我正在Django中构建一个应用程序,它使用一个实时/使用中的数据库。Django重建所有迁移

基本上由于应用开发的SQL数据库发生了一些结构的变化,它是导致Django的问题,Django会尝试迁移应用到已经存在的数据库。例如:

在Django应用程序我标志着email列作为唯一这是基于细微开发数据库上。然而,主数据库现在总是有一个表格变化,将email列标记为唯一。 Django正在与已经存在的这个独特的关键战斗。

那么是否有可能清除所有Django迁移,并使其与更新的SQL数据库结构相比再​​次进行迁移?

+0

您必须选择是否要Django管理您的数据库。如果你想对db进行你自己的修改,并让Django在之后采用修改,而不是Django改变数据库本身,可以考虑使用['managed = False'](https://docs.djangoproject.com/en/1.10/ref/models/options /#托管)。 – knbk

回答

1

如果你的模型是非常出与数据库同步的,最简单的方法可能是使用inspectdb从头开始重建您的模型。

如果您的模型已经非常接近数据库,那么首先要确保您的模型与数据库完全匹配。你可以使用django-extensions的sqldiff这个。

一旦你的Django模型匹配您的数据库,请按照this answer基于现有的数据库架构重新创建迁移。

+0

我的设置的问题并不是所有的数据库表都被网站使用,并且大部分数据库都被外部应用程序使用。所以我不能只检查或做一个sqldiff。我可以删除所有迁移并重新创建连接到更新的数据库结构的迁移吗? – Chaos

+0

@bmazoka关键在于您在数据库中使用的表格和应用程序的模型需要完全相同。一种选择是在本地计算机上获取数据库的副本并删除任何未使用的表。然后,您可以使用上述步骤创建您的迁移。 – YPCrumble

+0

啊我明白了。如果我删除了所有迁移文件,Django是否能够重新制作迁移?看起来像更简单的解决方案。如果我根据当前结构制作模型,我会失去对模型本身所做的所有更改以及我必须做的自定义事情。 – Chaos