如何解决我在使用 South 时遇到的迁移错误?
Posted
技术标签:
【中文标题】如何解决我在使用 South 时遇到的迁移错误?【英文标题】:How do I fix a migration error I'm getting with South? 【发布时间】:2012-09-18 04:58:33 【问题描述】:我尝试将以下模型中的字段从 CharField 更改为 ForeignKey,但在运行迁移时出现错误。我得到的错误是:
致命错误 - 以下 SQL 查询失败:CREATE INDEX "reserve_reviewbackup_fbfc09f1" ON "reserve_reviewbackup" ("user_id"); 错误是:索引reserve_reviewbackup_fbfc09f1 已经存在 !在实际运行迁移过程中发现错误!中止。
!由于您有一个不支持运行的数据库 !事务中的模式改变语句,我们有 !使其在迁移之间处于临时状态。
class Reviewbackup(models.Model):
review = models.CharField('Review', max_length = 2000)
user = models.CharField('Username', max_length = 200)
rating = models.IntegerField(max_length=2, choices=RATING_OPTIONS)
product = models.ForeignKey(Productbackup)
def __unicode__(self):
return self.review
user = models.ForeignKey(User, related_name='reviews')
【问题讨论】:
在同一版本中出现同样的错误(将字段类型从 CharField 更改为 ForeignKey 而不更改其名称),对我来说听起来像是一个错误。 (南 0.7.6) 为了完成与 South 的描述更改,我使用了两个步骤:1)第一次迁移,我更改了字段的类型和名称(名称设置为临时值) 2)我更改的第二次迁移字段的名称恢复为原始名称(临时名称丢弃)。当然,South 已经把我的 Sqlite DB 弄得无法修复了……让我们以此为一个很好的教训,在迁移之前始终转储所有 DB 内容:python manage.py dumpdata > savemyass.json
修改前后的代码可以写吗?
【参考方案1】:
我以前做过。只需从数据库管理员手动删除索引,一切正常。
【讨论】:
以上是关于如何解决我在使用 South 时遇到的迁移错误?的主要内容,如果未能解决你的问题,请参考以下文章