前言:
既然已經提到這個問題,就說明已經到了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模塊了
大概所有的異常都在這裏,應該還會有漏的,如果遇到此類問題可以按照我說的方法試一試,上面我使用的方法都是經過本人驗證真實有效的,可能因爲各人配置等原因,同一個方法不一定能解決所有人的問題,若看官有未解決的問題或者有異議的地方,可以發出來一起討論;