解決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')
- 然後就可以愉快的玩耍了