Python 使用django south进行外键迁移

Python 使用django south进行外键迁移,python,mysql,django,django-south,Python,Mysql,Django,Django South,我更改了外键的引用,但没有更改字段的名称,现在我在同一字段上有两个约束指向不同的表。 我的模特是这样的 class Activity(models.Model): ... source = models.ForeignKey(FSObject) 变成 class Activity(models.Model): ... source = models.ForeignKey(FreezedRef) 现在,我在运行测试时收到以下消息: IntegrityError:

我更改了外键的引用,但没有更改字段的名称,现在我在同一字段上有两个约束指向不同的表。 我的模特是这样的

class Activity(models.Model):
    ...
    source = models.ForeignKey(FSObject)
变成

class Activity(models.Model):
    ...
    source = models.ForeignKey(FreezedRef)
现在,我在运行测试时收到以下消息:

IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_tcf_api`.`storage_activity`, CONSTRAINT `source_id_refs_id_fc96b4b044ceb88` FOREIGN KEY (`source_id`) REFERENCES `storage_fsobject` (`id`))')
我该如何删除这个旧引用,显然,South跳过了它

  • 停止使用像MySQL这样的坏数据库,因为它只是一种sorta数据库,所以会产生类似这样的内部问题(很抱歉,这是真的)
  • ALTER TABLE tbl_name DROP外键fk_符号直接来自mysql文档:

  • 您是否在同一迁移中更新了其他内容?他们是工作还是休息?我之所以这么问,是因为我从来没有在运行迁移时遇到过South break问题——在迁移过程中,如果出现问题,它通常会引发异常。

    他很可能是在处理mysql中的一个特性。我以前遇到过这样的情况,一个表是myISAM,另一个表是InnoDB。South/django创建了containt,当然失败了,因为myISAM不支持外键。我不确定到底该如何走这条路,但我之前已经看到了确切的问题。因此,我的第一个建议是删除垃圾数据库,并转移到一个不那么糟糕的地方。这只是使用MySQL的众多问题之一为什么你认为MySQL不好?默认情况下,它不是远程ACID兼容的,没有外键约束,没有事务,无法索引超过1k的字段(你可以说这是一个糟糕的设计,但仍然只有300个unicode字符),无法为函数结果编制索引,没有EXPLAIN Analysis的实现,在模式更改命令期间没有事务,查询对每个表的每个查询只使用一个索引(强制使用大量多列索引,而不是动态组合索引)。我相信如果我花一些时间,我会想到更多,基本上我每周都会发现一些新的东西。很明显,我意识到这些东西中的一些(没有fk和交易)可以通过innodb得到帮助,大多数不能,但有些可以。InnoDB应该是默认的,如果你想快速而宽松地玩游戏来获得一点性能,你应该换成MyISAM,而不是相反。MySQL IMO唯一的优点是它是第一个被广泛采用的开源数据库,并为web提供了许多选项。关于PHP也可以有类似的说法,我不认为很多人会认为PHP是了不起的或最好的工具。