升级Django 2.x至3.x后mysql.connector.django后端失效的解决咨询
我之前把Django项目从2.x升级到3.x时,也碰到了一模一样的问题:用mysql-connector-python自带的mysql.connector.django后端,一运行manage.py runserver就弹出这个错误:
django.core.exceptions.ImproperlyConfigured: 'mysql.connector.django' isn't an available database backend. Try using 'django.db.backends.XXX', where XXX is one of: 'mysql', 'oracle', 'postgresql', 'sqlite3'
当时我的mysql-connector-python版本是8.0.19,查了才知道这个版本的mysql.connector.django只兼容到Django 2.2.11,对3.0+版本完全不支持。因为项目必须用这个非官方后端,我折腾出几个除了等官方更新之外的临时方案:
可行的临时解决办法
手动修改后端适配代码
找到你Python环境里mysql/connector/django目录下的base.py和client.py文件,对照Django 3.x数据库后端的接口要求调整代码。主要需要修改的点包括数据库连接初始化逻辑、游标类的继承方式,还有create_cursor这类方法的签名——Django 3.x对这些接口做了一些变更。不过这个方法需要你对Django的数据库底层机制有一定了解,而且后续升级mysql-connector-python时记得备份修改的文件,不然会被覆盖。临时降级Django版本
如果项目暂时不需要Django 3.x的新特性,可以先把Django降级到2.2.11(也就是mysql.connector.django支持的最后一个2.x版本),等官方更新后再升级回去。执行下面的命令就能降级:pip install django==2.2.11尝试社区补丁
有些社区开发者会针对这类兼容性问题做临时补丁,你可以搜搜针对mysql-connector-python适配Django 3.x的第三方包,不过用的时候要注意验证补丁的安全性和稳定性。
重要更新
更新说明:mysql.connector.django现已支持Django 3+版本,现在最推荐的方案是直接升级你的
mysql-connector-python到最新版本,执行命令:pip install --upgrade mysql-connector-python升级后重新配置数据库后端,应该就能正常运行了。
内容的提问来源于stack exchange,提问作者alstr

