Python 使用South(Mysql)在Django中迁移问题

Python 使用South(Mysql)在Django中迁移问题,python,django,migration,django-south,database-migration,Python,Django,Migration,Django South,Database Migration,我刚刚遇到一个问题,south似乎在两次迁移之间混淆了 最后(4)次迁移: 我有一张桌子: class VulnFuzz(models.Model): fuzzVector = models.CharField(max_length=200) FkToVulnTbl = models.ForeignKey(Vuln) 我想把那张桌子换成别的东西: class VulnFizz(models.Model): fizzVector = models.CharField(m

我刚刚遇到一个问题,
south
似乎在两次迁移之间混淆了

最后(4)次迁移:

我有一张桌子:

class VulnFuzz(models.Model):
    fuzzVector = models.CharField(max_length=200)
    FkToVulnTbl = models.ForeignKey(Vuln)
我想把那张桌子换成别的东西:

class VulnFizz(models.Model):
    fizzVector = models.CharField(max_length=200)
    FkToVulnTbl = models.ForeignKey(Vuln)
问题是,当我跑步时:

python manage.py schemamigration Scanner --auto
它说要迁移它,所以我使用:

python manage.py migrate Scanner
它说:

Migrating forwards to 0041_auto__del_field_vulnfizz_FkToVulnTbl.
 > Scanner:0032_auto__chg_field_vulnfuzz_FkToVulnTbl__del_index_vulnfuzz_FkToVulnTbl
FATAL ERROR - The following SQL query failed: DESCRIBE `Scanner_vulnfuzz`
The error was: (1146, "Table 'vulnawarefinal.scanner_vulnfuzz' doesn't exist")
 ! Error found during real run of migration! Aborting.

 ! 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:   = CREATE INDEX `Scanner_vulnfuzz_30a95dc2` ON `Scanner_vulnfuzz` (`FkToVulnTbl_id`);
在更换表格之前,我已尝试运行的建议:

CREATE INDEX `Scanner_vulnfuzz_30a95dc2` ON `Scanner_vulnfuzz` (`FkToVulnTbl_id`)
但这并没有解决问题

我现在不知所措,我该如何着手解决这个问题?或者我应该重做整个数据库


谢谢

您现在是迁移31,您想迁移到41。错误发生在迁移32,因此问题不在于您当前描述的代码更改和相关的迁移41

Migration 32希望表
Scanner\u vulnfuzz
在那里,但它不在那里。换句话说:您的数据库不是South期望的状态


您可以通过迁移回创建表的迁移,然后再次运行所有迁移来进行恢复。否则,您可能必须重新创建数据库,并从头开始再次运行
syncdb
migrate

数据库中的元数据可能会让它认为030迁移已经完成?您能签入数据库吗?您只是想重命名表的名称吗?不,第二个表的用途是再次尝试创建同一个表,但由于第一个表的问题,它不允许我这样做@PauloBu@RiccardoCagnasso-如图所示,这些迁移已显示在migrationhistory表中(南方默认)您可以使用:
python manage.py migrate Scanner xxx
迁移到特定的迁移,其中
xxx
是一个数字。因此,我需要迁移到30、31等,然后是32?我不知道。您需要迁移回创建表的迁移位置。但是,您可能无法向后迁移,因为您的数据库处于in中一致状态。在这种情况下,您可能需要从头开始或手动更改数据库。