python連接mysql與mysql-python在mac osx下安裝的異常整理

前言:

既然已經提到這個問題,就說明已經到了python與數據庫連接的環節,python的配置與數據庫的安裝這裏就不多說了,本文主要是基於連接mysql的問題上我曾花了一整天的時間去處理異常,可能是因爲我的運氣比較差,幾乎所有的問題都讓我遇到了,最後解決完所有問題的時候就有了想整理一篇文檔的想法,主要的目的就是爲了幫助別人少走彎路,這些異常包括新舊版mysql的特性、文件所有者沒有做重定向處理,mysql的加密規則,連接權限問題,ssl連接錯誤,環境變量配置,python組件缺失等等;問題比較多,大多集中在mysql-python在mac osx下安裝的時候,大家根據自己的異常對號入座;

ps:以下操作均默認爲在mac osx系統下操作

一、安裝mysql

前面說這一塊兒不打算講,但還是有些注意點需要講一下;

1、安裝MySQL Community Server

地址:https://dev.mysql.com/downloads/mysql/5.7.27.html#downloads

進入上面網址直接下載就好了,目前最新版本爲5.7.27,這裏也是5.7.27的鏈接;

 

選擇最新版本下載就好,下載第一個DMG文件就可以,下面會整理個命令下載方法,個人還是推薦第一種方法,比較簡單的界面安裝,直接下載安裝就可以;

2、通過mac終端使用命令行下載

這裏會使用brew命令,前提是你的mac要裝上brew命令,個人建議brew是必須要裝的,mac下安裝軟件少不了brew命令;

  • 安裝brew:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 更新brew:brew update
  • 卸載brew:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
  • brew安裝mysql:brew install mysql或者安裝指定版本:brew install [email protected]
  • 對mysql進行初始化操作:mysql_secure_installation

mysql登陸:mysql -u root -p ,執行完命令輸入密碼就可以登陸了,mysql帳密配置不多講,使用mysql_secure_installation安全設置命令進行配置就可以,具體參考其他文章

3、環境變量

如果是第一次安裝mysql,那麼第一次啓動命令不是mysql -u root -p,而是/usr/local/mysql/bin/mysql -u root -p,這是因爲沒有配置環境變量,只能在sql安裝路徑下使用,如果直接使用mysql -u root -p則會提示command not found ;

 

當然如果usr/local/mysql/bin/mysql -u root -p這個命令也提示command not found的話,可以使用$ alias mysql=/usr/local/mysql/bin/mysql命令;

4、配置環境變量:

位置:/usr/local/mysql/bin這裏的路徑是你的mysql存放路徑,可通過MySQLSetting的Configuration查看

  • 終端輸入vim ~/.bash_profile 打開文件
  • 在.bash_profile文本後添加PATH=$PATH:/usr/local/mysql/bin並保存
  • 終端輸入source ~/.bash_profile

此時環境變量配置完成,可進入根目錄使用mysql -u root -p驗證下是否可以連接,連接成功以後就可以在數據庫裏進行數據操作了,包括查看數據庫,數據表的增刪查改等操作;

數據庫的安裝就到這裏,不做重點,安裝也相對比較簡單;

二、MySQLdb

電腦上安裝好mysql與python後,下一步就是將二者關聯起來,才能在python中調用數據庫,達到操作數據庫的目的,這個時候就需要使用python的數據庫接口,python支持的數據庫有很多,不止有mysql,還有其他的mSQL、PostgreSQL、Microsoft SQL Server 2000、Oracle等等,具體的可以去https://wiki.python.org/moin/DatabaseInterfaces中查看,下面即將使用的MySQLdb就是python連接mysql數據庫的接口,MySQLdb模塊包含在mysql-python包中,此時我們要安裝mysql-python;安裝方式常用的還是有兩種,一種是手動安裝,下載源碼包解壓後通過執行本地文件的方式安裝;第二種常用的就是pip安裝,也是最容易出現異常的一種方式,下面就來分別介紹下兩種方式的安裝;

1、pip

既然需要用到pip命令安裝,肯定實現需要安裝pip了,安裝命令很簡單:easy_install pip;這裏注意的是如果你是通過python官網下載最新的python,都會自帶pip工具的,不需要單獨安裝,驗證是否安裝pip工具可以用pip --version來校驗;

2、pip安裝python-mysql

安裝命令:pip install python-mysql

3、手動安裝python-mysql

安裝方法:訪問https://sourceforge.net/projects/mysql-python/,下載最新的壓縮包,解壓後進入文件目錄使用python setup.py install命令;

4、異常整理:

異常1:EnvironmentError: mysql_config not found

這個異常是上面環境變量設置被忽略導致的,正常的來說在/usr/local/mysql/bin目錄下會自動生成 mysql_config 文件,各位可以去驗證一下,而在其他目錄下使用上述命令肯定是找不到這個文件了,只要配置好環境變量,基本上不會出現此類問題;經驗證用手動安裝也會出現此類問題,除了添加環境變量還有一種方法(寫在下面了)

 

異常2:urllib2.HTTPError: HTTP Error 403: SSL is required;

這是一個SSL鏈接錯誤,這個鏈接可以直接訪問http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz此鏈接,下載下來的tar.gz包不要解壓,直接拷貝至操作目錄中即可解決;

 

異常3:mysql_config not found

這個異常上面已經講過了,但是手動安裝的方式下還有第二種解決辦法就是進入setup.py文件,查找mysql_config,將後面的路徑改掉,改成本地mysql的安裝路徑,例如:mysql_config = /usr/local/mysql/bin/mysql_config;改完後保存再次執行則不會報此類問題;

 

異常4:_mysql.c:44:10: fatal error: ‘my_config.h’ file not found

這個異常是提示找不到my_config.h文件,網上最常見的辦法就是安裝mysql-connector-c,執行命令:brew install mysql-connector-c,執行這一步的時候可能也會報錯,這節點的錯誤系統會提示你應該怎麼做,你跟着命令行做下去正常都可以正常安裝;

 

異常5:IndexError: string index out of range

這個時候需要修改一下mysql的配置文件,首先得找到你的mysql的安裝路徑,找到mysql_config文件,打開文件vim mysql_config,找到libs="$libs -l ",改爲libs="$libs -lmysqlclient -lssl -lcrypto "

 

異常6:ModuleNotFoundError: No module named 'ConfigParser',Command "python setup.py egg_info" failed with error code 1

這個異常要注意一下,這個異常通常是使用pip3 install MySQL-python命令時出來的,官方的解釋爲

 

意思就是python3不支持此類安裝,所以還是要通過pip install MySQL-python命令來安裝;

這裏我有驗證過網上的解決方案,說這是因爲python2與3的特異性,ConfigParser.py 已經更名爲 configparser.py 所以纔會報錯,我這裏修改後仍然沒有解決,此方法失敗;

 

異常7:error: command 'cc' failed with exit status 1

這個原因似乎是Python使用其生成的選項來編譯模塊,但其中一個選項不起作用,則會報這個錯誤,這裏我的處理方法就是安裝XCode或者升級XCode,安裝完之後沒有這個錯誤了,XCode是蘋果的插件,我是卸載老闆的XCode後安裝最新的XCode來進行解決的,安裝命令:xcode-select --install

 

異常8:Reason: image not found。

這個異常是執行import MySQLdb的時候出現的

解決方法就是:

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

$ sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

執行這兩條命令即可解決;

 

異常9:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

這個異常是在操作數據庫時出現的

解決方法:

將ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

修改爲

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

 

異常10:2059 - authentication plugin caching_sha2_password

這個異常是連接數據庫時候出現的,這是因爲加密規則衝突導致,只要重置加密規則就可以了;

alter user ‘test’@’%’ identified by ‘123456’ password expire never;

alter user ‘test’@’%’ identified with mysql_native_password by ‘123456’

執行這兩行命令就可以

 

異常11:Can't connect to local MySQL server through socket '/tmp/mysql.sock'

解決:這個異常是無法連接數據庫,這裏使用mysql.server start命令啓動一下mysql服務即可

 

異常12:終端中可以import的模塊在Pycharm中導入報錯

上圖顯示終端import mysqldb模塊沒有報錯,說明已經安裝成功,但是在pycharm中是下圖這個樣子:

原因:

這是因爲終端使用的python路徑與pycharm中使用的不同,可能存在兩個或兩個以上的python路徑(我這裏pycharm使用的python3的路徑,終端使用的python2.7的路徑)

解決方法:

既然知道原因了就很好解決,可以先從下圖的位置查看當前python支持什麼模塊:

這裏顯而易見沒有我們想要的mysqldb,點擊第三個箭頭增加路徑:

修改完路徑保存,下次就隨時切換項目路徑了:

這個時候就可以正常的使用mysqldb模塊了

 

大概所有的異常都在這裏,應該還會有漏的,如果遇到此類問題可以按照我說的方法試一試,上面我使用的方法都是經過本人驗證真實有效的,可能因爲各人配置等原因,同一個方法不一定能解決所有人的問題,若看官有未解決的問題或者有異議的地方,可以發出來一起討論;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章