为什么我升级版本 django-mptt 后出现数据库迁移错误?

2024-03-10

我的 Django 应用程序有一个requirements.txt 文件(如图所示here https://gist.github.com/saqib-zmi/b0168e18ee4a0a7ee2f6),我用它在虚拟环境中安装模块。一切正常。

但是,我现在正在尝试将 django-mptt 从 0.6.1 升级到最新版本。 (我实际上并不关心升级django-mptt。我只想升级我的Django版本。但是似乎升级Django,我必须首先按照描述升级django-mptthere https://stackoverflow.com/questions/31107287/upgrading-from-django-1-7-1-to-1-8-2-fails)。所以我这样做pip install -U django-mptt。这会导致 django-mptt 从 0.6.1 变为 0.7.4,Django 从 1.7.1 变为 1.8.2。这也导致 django-cache-machine 从 origin 变成 master。您可以在下面的屏幕截图中看到更改。

然后当我这样做时manage.py runserver然后它提示我迁移。所以我就这么做了。没问题。但是,随后如果我删除所有表然后再次运行迁移,则会在迁移过程中收到此错误:

django.db.utils.OperationalError: 
(1005, 'Can\'t create table `mydb_instance`.`#sql-21b_1e` 
(errno: 150 "Foreign key constraint is incorrectly formed")')

完整的堆栈跟踪是here https://gist.github.com/saqib-zmi/78c214eab4e61c7467e9.

这是什么错误?这是否与我使用 MariaDB(服务器版本:10.0.15-MariaDB Homebrew)而不是 MySQL 作为数据库有关?

编辑:此点下方的部分于 2015 年 7 月 6 日 5:28 UTC 添加

我上面提到升级后,系统提示我进行迁移。奇怪的是,即使升级 MPTT 不会导致创建任何新的迁移文件,也会发生这种情况!当我这样做的时候manage.py runserver,我收到以下警告消息。为什么?这个不成立:

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

编辑:此点下方的部分于 2015 年 7 月 6 日 17:00 UTC 添加

作为实验,我将底层数据库从 MariaDB 切换到 MySQL(服务器版本:5.6.25)。问题仍然存在。我得到的错误是Cannot add foreign key constraint。完整的堆栈跟踪是here https://gist.github.com/saqib-zmi/8fdfe9659031b52e967b.

编辑:此点下方的部分于 2015 年 7 月 6 日 17:05 UTC 添加

浏览我 5 分钟前发布的堆栈跟踪,我发现错误是由以下 SQL 语句触发的:

ALTER TABLE `myapp2_mymodel2` ADD CONSTRAINT `mymod_mymodel5_id_335ee73cecd6ecbf_fk_myapp5_mymodel5_id` FOREIGN KEY (`mymodel5_id`) REFERENCES `myapp5_mymodel5`;

我明白问题是什么了。myapp2_mymodel有一个外键约束myapp5_mymodel。但是,当它尝试创建此 FK 时,它会失败,因为外键的目标尚不存在!为什么升级后建表顺序不一样了?


我自己解决了这个问题。看起来我的 Django 应用程序之一缺少 myapp2 缺少迁移文件夹。我修好了它,一切开始正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我升级版本 django-mptt 后出现数据库迁移错误? 的相关文章

随机推荐