使用SOUTH和django迁移时出错

时间:2011-07-05 06:40:14

标签: django django-south django-syncdb

我在django中迁移Sentry应用时遇到此错误。我正在使用mysql

 ! Since you have a database that does not support running
 ! schema-altering statements in transactions, we have had
 ! to leave it in an interim state between migrations.

! You *might* be able to recover with:   = DROP TABLE `sentry_groupedmessage` CASCADE; []
   = DROP TABLE `sentry_message` CASCADE; []

我应该怎么做

2 个答案:

答案 0 :(得分:2)

您的问题是迁移失败,并且MySQL不支持事务,因此South不知道表所处的状态。

从这一点上恢复它的唯一方法是:

  • 检查表并检查它们的迁移状态(更改了哪些列等)
  • 备份两个表(转出)
  • 删除表格。
  • 使用migrate命令重新创建表。
  • 如果迁移尚未成功,请使用south进入表格与转出数据的架构匹配的状态
  • 导入转储
  • 再次迁移

答案 1 :(得分:0)

除托马斯的回答之外;如果在重新运行迁移期间获得密钥IntegrityError的任何content_type_id,还要删除专门为应用程序模型创建的权限。错误类似于以下内容:

IntegrityError: (1062, "Duplicate entry '209-view_<model name>' for key 'content_type_id'")

在这种情况下,请从表auth_permission中删除这些权限。您可以like搜索模型名称以查找所有权限(查看,添加,更改,删除)。

Select * from auth_permission where codename like '%<model name>'

上面的命令将为您提供模型的所有权限,您可以获取其ID并删除(或只是编写连接)。