0

我有一个旧版 MySQL 数据库,用作 Django webapp 的基础。原来所有的表都使用MyISAM引擎,但是由于外键的要求,我把所有的表都改成了InnoDB,并在相关模型中添加了外键和唯一字段。

我将很快将此开发数据库导出到生产服务器,因此我使用 South 将数据模型迁移到数据库。但是,我可以看到没有一个表在表字段本身中具有显式的 PK、FK 和唯一约束,但它们显示在初始迁移脚本生成的 0001_initial.py 文件中。

我通过执行迁移

./manage.py schemamigration app --initial
./manage.py migrate app

Received Table Exists error, reran with --fake flag
./manage.py migrate app --fake
./manage.py migrate app

最后执行的命令没有错误。所以我的问题是,表不应该在执行数据迁移后设置明确的约束吗?

4

1 回答 1

0

当您执行虚假迁移时,这意味着迁移在数据库中被伪造。South 假设迁移(0001_initial.py 文件中的迁移)已完成。使用 --fake 迁移时不会发生数据库更改。您收到表存在错误,因为您将要创建的表存在于数据库中。可能是您运行 syncdb 时创建的表。

于 2013-07-19T04:16:41.663 回答