用Python做机器学习、大数据、数据挖掘、爬虫什么,基本上都会用到数据库,而我们一般使用的是SQL数据库,即关系数据库。我们最常用的两款关系数据库就是MySQL和SQL Server。本文会介绍如何在Python3下安装对MySQL进行调用的支持库。
很多人都知道python有一个对mysql支持的库,叫MySQL-Python,即mysqldb。然而,在python3中,不再支持mysqldb,取而代之的是PyMySQL。当你试图安装mysqldb的时候会出现如下情况:
me@mycomputer:~ $ sudo pip3 install mysql-python Collecting mysql-python Using cached MySQL-python-1.2.5.zip Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-build-bn6a9cve/mysql-python/setup.py", line 13, in <module> from setup_posix import get_config File "/tmp/pip-build-bn6a9cve/mysql-python/setup_posix.py", line 2, in <module> from ConfigParser import SafeConfigParser ImportError: No module named 'ConfigParser' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-bn6a9cve/mysql-python/
看提示,是不是以为是缺少了ConfigParser这个模块呢?其实不是的,因为当你安装好这个模块后,这个问题依旧存在,而且,安装后的模块是configparser而不是大写字母的ConfigParser,这是我在安装这个mysqldb模块时候踩的坑,在此向大家提示一下。
我们需要做的是如下:
me@mycomputer:~ $ sudo pip3 install pymysql Collecting pymysql Downloading PyMySQL-0.7.11-py2.py3-none-any.whl (78kB) 100% |████████████████████████████████| 81kB 75kB/s Installing collected packages: pymysql Successfully installed pymysql-0.7.11
这时候,我们运行python3,使用pymysql:
import pymysql.cursors con = pymysql.connect(host='127.0.0.1',port=3306,user='myuser',password='mypassword',db='test',charset='utf8',cursorclass=pymysql.cursors.DictCursor) # 执行sql语句 try: # 创建游标 cursor = con.cursor() # 执行sql语句,插入记录 sql = 'INSERT INTO T1 (mainKey, value) VALUES (0, 123)' # 执行SQL,并返回收影响行数 effect_row = cursor.execute(sql); # 没有设置默认自动提交,需要主动提交,以保存所执行的语句 con.commit() # 关闭游标 cursor.close() finally: pass; # 关闭连接 con.close()
当服务器为Linux系列服务器的时候,默认情况下,直接运行上面的Python3程序会报错,这时候,我们需要在mysql里面做一些关于用户权限的配置。
对于用户myuser,我们在mysql里面执行以下命令来获得指定权限:
mysql> GRANT ALL PRIVILEGES ON test.* TO 'myuser'@'host' IDENTIFIED BY 'mypassword'; mysql> FLUSH PRIVILEGES;
其中,第一行是将对数据库“test”中所有数据表的所有权限赋给用户myuser,并使用指定口令来验证身份,而host那个可以替换为任意的主机名,比如
“localhost”
“127.0.0.1”
“192.168.1.1”等。
如果想匹配任意远程主机的话,那么可以使用%符号来替换host。
如果我们只想将部分权限给用户的话,比如查询权限,那么可以将“ALL PRIVILEGES”替换为“SELECT”,这样,该用户就只能执行数据库的查询操作了。
同理,我们还可以替换为其他操作。比如修改操作“UPDATE”,插入操作“INSERT”,删除记录操作“DELETE”等。
关于权限,mysql可以参考这篇文章:
http://blog.csdn.net/wulantian/article/details/38230635
sqlServer可以参考微软技术文档中的这篇文章:
https://technet.microsoft.com/zh-cn/library/ms178569(v=sql.110).aspx
另外,命令中有“ test.* ”,“test”是数据库database中的“test”数据库,*代表着数据库下所有的表,如果写成具体的某个数据表的话,那么操作将只能针对该表起作用。
第二行则是刷新权限记录,不执行这一句命令的话,会导致前一行命令不能起作用。
当我们执行完上述两行命令之后,再运行我们的Python3程序,就不会报错啦。
当我们需要收回用户权限的时候,可以使用REVOKE来实现:
REVOKE [权限] ON [数据库].[数据表] FROM [用户名]; FLUSH PRIVILEGES;
版权声明本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。本文地址: https://blog.ailemon.net/2017/11/11/python3-5-install-and-use-sql-package/ All articles are under Attribution-NonCommercial-ShareAlike 4.0 |
“python3.5 安装使用MySQL支持库”上的1条回复
很少能看到这么专注的博客啦!