解决Django使用mysqlclient连接MySQL,而无法pip install mysqlclient 问题
详情:
该问题主要出现在Django在Ubuntu系统中连接MySQL时会报错:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
然而,ubuntu安装mysqlclient时会出现很多麻烦的问题
策略:使用pymysql连接MySQL
- 安装pymysql
pip3 install pymysql
- 修改项目的
__init__.py
import pymysql
pymysql.install_as_MySQLdb()
此时运行项目,会保错:
......
File "/home/brightxu/Django/WGApps/venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
主要是pymysql与mysqlclient版本不一致的问题
- 修改环境
根据错误提示,打开文件venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py
,找到第36行代码,将34 ~ 36 行的代码注释掉:
# version = Database.version_info
# if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
然后还会保错:
......
File "/home/brightxu/Django/WGApps/venv/lib/python3.6/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'
根据错误提示,打开文件venv/lib/python3.6/site-packages/django/db/backends/mysql/operations.py
,找到第146行代码,将145和 146 行的代码注释掉:
# if query is not None:
# query = query.decode(errors='replace')
- 然后就可以愉快的玩耍了