Django 2.2.6连接MySQL 8数据库失败,多种尝试仍未解决
解决Django 2.2.6连接MySQL 8数据库的常见问题
我太懂你这种折腾半天连不上的挫败感了——Django 2.x和MySQL 8的组合确实有几个容易踩的坑,咱们一个个来排查解决:
方案1:确保mysqlclient真正生效
你说已经装了mysqlclient 1.4.4,但Django还是提示找不到MySQLdb,大概率是Python环境没正确识别到这个包,或者安装时缺系统依赖:
先检查当前Python环境能不能导入mysqlclient:
打开终端输入python,然后执行import MySQLdb,如果报错,说明包没装对环境。- 如果是Linux/macOS,先装系统依赖:
然后重新安装mysqlclient:# Ubuntu/Debian sudo apt-get install python3-dev default-libmysqlclient-dev build-essential # macOS(用brew) brew install mysql-connector-cpip install --force-reinstall mysqlclient - 如果是Windows,直接下载对应Python版本的mysqlclient whl包(匹配你的Python版本和系统位数),用本地安装:
pip install mysqlclient-1.4.4-cp37-cp37m-win_amd64.whl
- 如果是Linux/macOS,先装系统依赖:
确认导入成功后,保持settings.py的数据库配置不变,重新运行
python manage.py runserver。
方案2:用pymysql绕过版本检查
如果还是搞不定mysqlclient,用pymysql的话,Django 2.2会强制检查mysqlclient版本,咱们可以手动修改pymysql的版本信息来绕过:
在项目根目录的__init__.py(和settings.py同目录)里添加:
import pymysql # 把版本改成Django要求的1.3.13+ pymysql.version_info = (1, 4, 6, 'final', 0) pymysql.install_as_MySQLdb()
然后保持数据库配置不变,再启动服务,这个方法我自己遇到版本报错时亲测有效。
方案3:正确配置mysql-connector-python
你之前用mysql.connector.django报错,是因为没装对应的驱动包,而且MySQL 8默认的认证插件需要额外配置:
- 先安装驱动:
pip install mysql-connector-python - 修改settings.py的数据库配置:
这里加DATABASES = { 'default': { 'ENGINE': 'mysql.connector.django', 'NAME': 'portfoliodb', 'USER': 'c**********s', 'PASSWORD': 'XXX', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'auth_plugin': 'mysql_native_password', }, } }auth_plugin是因为MySQL 8默认用caching_sha2_password,部分驱动不兼容,改成原生密码认证就能解决连接问题。
最后几个必查点
- 确认MySQL服务在3306端口运行,用
mysql -u c**********s -p能正常登录,并且portfoliodb数据库已经创建,该用户有这个库的读写权限。 - 检查你用的Python环境是不是激活了虚拟环境(如果用了的话),避免装包到全局环境但项目用的是虚拟环境。
内容的提问来源于stack exchange,提问作者CThomas
相关产品推荐
相关产品推荐

