这是一个普遍的问题。我将举例说明我所关注的内容,但我所关注的一般想法是:我是否可以绕过迁移来管理模型的架构?现在,我知道人们喜欢迁移有很多很好的理由,但是我精通DDL SQL并且正在寻找模式更改,并且发现了用于我的用例,我花了更多时间来解决迁移问题,而不是从中受益。我没有使用灯具作为例子,我不需要非常动态的迁移功能a Chef / Puppet,至少在我投入生产之前。
事实上,我发现迁移DDL缺乏透明度非常可怕。
这只是我正在处理的一个示例问题:
class Profile(models.Model):
rdbname = RDBNAME
name = models.CharField(max_length=80, blank=True)
creation = models.DateTimeField(auto_now=True)
rolecount = models.IntegerField(default=0)
usercount = models.IntegerField(default=0)
def __unicode__(self):
return self.name
class Meta:
ordering = ["-rolecount", "name"]
我刚刚添加了这个索引,它出现在迁移中, 但它没有被创建
unique_together = ("rdbname", "name")
这是输出:
Running migrations:
No migrations to apply.
但这不是帮助我解决迁移问题的请求。我可以删除受影响的表,让迁移重新创建它们。或者手动添加索引。我通常不想使用 manage.py migrate ,我想知道是否有方法可以从模型中受益,但是用老式的手动方式来管理你的数据库。
一种可能的方法是在“from-scratch / dry-run / sql output”模式下使用makemigrations来创建sql脚本。使用所有drop / create表和索引,就好像数据库是空的一样。如果将它与之前的从头开始进行比较,您会看到任何已更改的内容,您可以创建一个脚本来说明只需添加一列。或者我的索引在我的情况下。
在我的情况下你会在你最喜欢的sql实用程序psql(Postgres)中执行它。
我不能得到一长串解释为什么迁移是猫的睡衣?我已经知道了。但我很高兴听到那些尝试过没有出路的人,这对我来说是一个有用的数据点。我也必须咬紧牙关。
只是想知道是否有其他人设法解决了这些问题。