Django配置MySQL作为后端执行makemigrations报错该如何解决?
报错原因
- 该警告由Django与MySQL的版本适配问题导致:你当前使用的MySQL版本(大概率是8.0+高版本或者部分定制MySQL发行版)已经废弃了
default_storage_engine系统变量,而你安装的Django 3.2版本仍然会主动查询该变量来校验数据库连接,因此触发运行时警告。 - 后续输出的
No changes detected不属于报错,仅表示当前没有检测到模型层的变更,不需要生成新的迁移文件。
解决方法
按优先级从高到低选择即可:
升级Django版本
直接将Django升级到4.0及以上版本,新版本已经修复了对高版本MySQL的变量适配问题,无需修改其他配置,执行命令:pip install --upgrade django修改settings.py数据库配置,显式指定引擎
如果不方便升级Django版本,直接在DATABASES的default配置项中添加OPTIONS参数,手动指定存储引擎,跳过变量查询逻辑,修改后的配置如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', 'PASSWORD':'2684', 'HOST':'127.0.0.1', 'PORT':'3306', 'USER':'root', # 新增以下配置 'OPTIONS': { 'init_command': "SET storage_engine=INNODB", } } }如果修改后仍提示变量不存在,把
init_command的值换成"SET default_storage_engine=INNODB"即可。更新MySQL连接驱动
如果你使用pymysql作为连接驱动,替换为官方推荐的mysqlclient,版本选择2.1.0及以上即可:pip uninstall pymysql pip install mysqlclient>=2.1.0
内容的提问来源于stack exchange,提问作者JOHN ARTHUR
相关产品推荐
相关产品推荐

