测试Django与MySQL 8.0时出现datetime不兼容问题求助
解决Django 2.0.4 + MySQL 8.0.11登录时的AttributeError问题
我之前也碰到过一模一样的兼容性问题,当时折腾了好一会儿才搞定,给你分享下解决方案:
问题原因
Django 2.0.4发布于2018年4月,而MySQL 8.0.11是同期刚推出的版本,Django的早期2.0.x版本对MySQL 8.0的datetime类型处理存在bug——在后台登录的认证逻辑中,代码错误地试图对datetime.datetime对象调用字符串的split()方法,导致抛出'datetime.datetime' object has no attribute 'split'这个错误。
解决方案
1. 优先升级Django版本(最推荐)
Django在后续的2.0.x补丁版本(比如2.0.10及以上)以及更高的2.x稳定版中已经修复了这个MySQL 8.0的兼容性问题。你可以执行以下命令升级到同系列的最新补丁版:
pip install --upgrade django==2.0.10
如果项目允许,更建议直接升级到Django 2.2 LTS版本,它对MySQL 8.0的支持更完善,也有更长的维护周期。
2. 调整时区配置(临时 workaround)
如果暂时无法升级Django,可以通过统一时区来规避这个问题:
- 在MySQL的配置文件(比如
my.cnf或my.ini)中添加或修改:
保存后重启MySQL服务。default-time-zone = '+00:00' - 在Django项目的
settings.py中确保时区设置为UTC:TIME_ZONE = 'UTC' USE_TZ = True
3. 确认使用正确的数据库驱动
旧的MySQL-python驱动不支持MySQL 8.0,必须使用mysqlclient。如果你的项目还在使用旧驱动,执行以下命令安装正确的驱动:
pip install mysqlclient
验证
完成上述操作后,重启Django开发服务器,再次访问http://localhost:8000/admin/login/?next=/admin/提交POST请求,应该就能正常登录后台了。
内容的提问来源于stack exchange,提问作者marcelo.delta
相关产品推荐
相关产品推荐

