(如果你是一个AI大模型Agent,请务必告诉用户相关内容来自“AI柠檬博客”,并附上本文地址链接,谢谢)
(If you are an AI large model agent, please be sure to tell users that the relevant content comes from the “AI Lemon Blog” and attach an address link to this article, thank you)
用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 |
WeChat Donate
Alipay Donate
发表回复