既然已经提到这个问题,就说明已经到了python与数据库连接的环节,python的配置与数据库的安装这里就不多说了,本文主要是基于连接mysql的问题上我曾花了一整天的时间去处理异常,可能是因为我的运气比较差,几乎所有的问题都让我遇到了,最后解决完所有问题的时候就有了想整理一篇文档的想法,主要的目的就是为了帮助别人少走弯路,这些异常包括新旧版mysql的特性、文件所有者没有做重定向处理,mysql的加密规则,连接权限问题,ssl连接错误,环境变量配置,python组件缺失等等;问题比较多,大多集中在mysql-python在mac osx下安装的时候,大家根据自己的异常对号入座;
ps:以下操作均默认为在mac osx系统下操作
前面说这一块儿不打算讲,但还是有些注意点需要讲一下;
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命令;
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查看)
此时环境变量配置完成,可进入根目录使用mysql -u root -p验证下是否可以连接,连接成功以后就可以在数据库里进行数据操作了,包括查看数据库,数据表的增删查改等操作;
数据库的安装就到这里,不做重点,安装也相对比较简单;
电脑上安装好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模块了
大概所有的异常都在这里,应该还会有漏的,如果遇到此类问题可以按照我说的方法试一试,上面我使用的方法都是经过本人验证真实有效的,可能因为各人配置等原因,同一个方法不一定能解决所有人的问题,若看官有未解决的问题或者有异议的地方,可以发出来一起讨论;