關於 python3 不支援 MySQLdb 的說法

蠟筆小新發表於2019-05-05

在使用Django開發專案的時候,連線資料庫使用的mysql,這個看網上的資料說python3不支援MySQLdb,而Django預設使用的是MySQLdb,需要更改為pymysql,所以在init.py的檔案中新增如下程式碼

    import pymysql
    pymysql.install_as_MySQLdb()

新增完以後執行的時候出現了報錯,

關於python3不支援MySQLdb的說法

錯誤資訊告訴我們我們的版本是0.9.3,這個是我的pymysql的版本

關於python3不支援MySQLdb的說法
所以我們需要修改配置檔案base.py,關閉掉版本檢測
我的位置是這個
/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py
再次執行又會報錯

關於python3不支援MySQLdb的說法

需要再次修改
/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/operations.py
這個檔案,把檔案裡面146行改成encode
上面的檔案路徑是我本人的本地的路徑,具體的還要看你們python安裝的路徑
這個是有已經可以成功的執行遷移,

透過這個問題,我發現了整個解決方法,就是安裝pymysql當作MySQLdb的替代品,但是當我用python3.7測試MySQLdb的時候,我發現了更奇怪的問題,居然可以使用MySQLdb,如下

關於python3不支援MySQLdb的說法

這個時候我產生了新的疑惑,MySQLdb不是不支援python3嗎?那這裡為什麼可以用呢?
於是我檢視了MySQLdb的版本,如下圖:

關於python3不支援MySQLdb的說法

版本是1.4.2.post1
然後我去看了一下本地安裝的模組

關於python3不支援MySQLdb的說法

這裡並沒有MySQLdb這個模組,不過一個模組版本號卻引起了我的注意,那就是mysqlclient 這個模組,他的版本號居然是1.4.2.post1,既然這樣那我們去看看這個模組的具體表述吧,在https://pypi.org/ ,裡面我們查詢到了這個模組
如下:
關於python3不支援MySQLdb的說法
這個時候恍然大悟,原來他是屬於MySQLdb的,而MySQLdb真的專案名叫MySQLdb1,他的最高版本是1.2.5,mysqlclient代替了他成為了MySQLdb在執行,到這裡我們就整理清楚了整個問題。也非常感謝網友-永夜初晗凝碧天ᵖʸᵗʰᵒ 的支援與幫助。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章