Django连接MySQL8.0数据库时报错:ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.9.3

搭建 Django2.2.6 + Python3.7.4 + MySQL8.0.17 时同步数据库报错:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决办法:

先找到Python安装路径下的
H:\Python\Lib\site-packages\django\db\backends\mysql\base.py 文件
然后将下列代码注释掉:

# if version < (1, 3, 13):
#    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

如果你恰好使用的是Pycharm,而且创建了虚拟环境,你很可能会发现上面的代码注释掉之后还是会报错。那这又是为何呢?
这是因为你注释掉的是Python安装路径下的base.py,而你正在开发的项目使用的是你之前创建的虚拟环境中的base.py文件,所以你应该知道是何原因了。
好,找到Pycharm下的
venv\Lib\django\db\backends\mysql\base.py
将上述代码重新注释掉即可。

附 Django 连接 MySQL 的配置信息
settings.py 文件
import pymysql  
pymysql.install_as_MySQLdb()
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'CMDB', 
        'USER': 'root',
        'PASSWORD': '******',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            },
    }
}
# 这两行也可添加到__init__.py 文件中,作用是一样的。
# 因为Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql。
import pymysql  
pymysql.install_as_MySQLdb()

驱动(ENGINE)、主机地址(HOST)、端口号(PORT)、数据库(NAME)、用户名(NAME)以及登录密码(PASSWORD);

完成了上述步骤,下面就可以进行数据迁移了。

python manage.py makemigrations
python manage.py migrate
附加错误

博主第一次进行迁移时,又报错了。

.......省略号代表上面还有一堆错误

 File "G:\Python\Django\CMDB\venv\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'

显然这是个编码问题咯,我的解决方式为打开operations.py(报错的倒数第二行)
然后对下列代码进行强制修改

if query is not None:
	query = query.decode(errors='replace')

修改为:

if query is not None:
	query = query.encode('utf-8').decode(errors='replace')

在经过上面一系列过程后,博主数据迁移成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值