django 2.2和mysql使用的常見問題

多是因爲Django使用的MySQLdb庫對Python3不支持,咱們用採用了PyMySQL庫來代替,致使出現各類坑,特別是執行如下2條命令的是時候:

python manage.py makemigrations
or
python manage.py inspectdb

報錯1:(提示你的mysqlclient版本太低),不管你是否執行pip install mysqlclient安裝的最新版的,都拋出:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

使用註釋大法解決:找到本身Python安裝路勁下的Python36-32\Lib\site-packages\django\db\backends\mysql\base.py文件 將文件中的以下代碼註釋(可能需先關閉pycharm IDE)python

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

報錯2:(str類型沒有decode方法)

py3默認str是unicode編碼,經過encode方法編碼成bytes類型,後者纔有decode解碼方法。提示錯誤來源:Python36\lib\site-packages\django\db\backends\mysql\operations.py", line 149, in last_executed_querymysql

解決辦法: 
    1. 再報錯的Python36\lib\site-packages\django\db\backends\mysql\operations.py文件最上面添加 
    from django.utils.encoding import force_str
    2. 將last_executed_query方法中以下代碼註釋
    query = getattr(cursor, '_executed', None)
    if query is not None:
      query = query.decode(errors='replace')
    return query
    3. 在註釋的代碼下添加以下代碼:
    return force_str(getattr(cursor, '_executed', None), errors='replace')
而後再次執行python manage.py makemigrations 成功

參考鏈接: https://www.zhangshengrong.com/p/281om6qgNw/sql

相關文章
相關標籤/搜索