搭建 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')
在经过上面一系列过程后,博主数据迁移成功!