Django啟動時mysqlclient報錯版本低於1.3.13


啟動Django時報錯,mysqlclient版本低於1.3.13:

File "C:\Users\wurij\AppData\Local\Programs\Python\Python37\lib\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.

  

解決思路及過程如下,解決辦法可直接查看步驟5

1.一開始懷疑是公司內網的pip源中的mysqlclient版本低~

2.通過pip list查看mysqlclient包的版本是1.4.6,並不低啊!

3.找到報錯的base.py文件,將其中檢測版本的兩行拿出來,在當前的Python環境中執行,結果是版本也並不低於1.3.13,真是見鬼了~

import MySQLdb as Database
version = Database.version_info
print(version, version < (1, 3, 13))
#(1, 4, 6, 'final', 0) False

4.想起來之前有用過pymysql包,是不是這貨引起的沖突,於是將pymysql卸載,同時清理pymysql在Django項目__init__.py的兩行代碼,報錯不在了!

5.原因是之前使用了pymysql,在Django主app目錄(有settings.py的那個目錄)下的__init__.py中添加了如下兩行代碼

import pymysql
pymysql.install_as_MySQLdb()

這兩行代碼覆蓋了base.py中的Database變量,版本判斷函數檢測的是PyMySql的版本

於是pip list查看PyMySql的版本,巧了!也是0.9.3,問題總算是水落石出了!

 

順便說幾句:

  1. 網上很多人用pymysql替代mysqlclient,說是mysqlclient很難裝,其實也還好(可參考我的上一篇隨筆)。
  2. 如果你是用的pymysql替換mysqlclient,出現前面版本的報錯,需要將base.py中的“if version < (1, 3, 13):”及后面一行注釋掉。
  3. 如果你用的pymysql替換mysqlclient,Django開啟debug模式后,啟動時會報一個decode的錯,解決辦法是找到報錯的那一行將decode方法改成encode就行了。

感覺使用pymysql替換mysqlclient的破壞性太強了,都要直接修改django的源碼了(當然也可以自己修改settings中mysql的bakends到自己的目錄),還不如直接使用mysqlclient(畢竟是Django官方推薦的)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM