pymysql简要使用

由于这两天需要批量处理数据,所以学习了一下python 的数据库处理模块,pymysql

英文文档地址如下:https://pymysql.readthedocs.io/en/latest/

部分借鉴了博客园内容https://www.cnblogs.com/wt11/p/6141225.html

python 3.x
centos 7
mysql

下载方式略,pip即可。
首先建立数据库连接,

打开数据库连接

db = pymysql.connect(“ip地址”,”用户”,”密码”,”数据库名” )
依次输入ip,数据库的用户名密码,以及所使用的database

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

使用 execute() 方法执行 SQL 查询
cursor.execute(“select distinct stage_id from task_metrics;”)

同时cursor.execute会返回一个数字,是执行的mysql语句的影响行数,如果是select的话就是返回select结果的行数。在批处理中会用到。

查询结束后,最后要关闭数据库连接和游标。

cursor.close()

db.close()

几个常用函数

cursor.fetchone()#获得sql查询结果的单条数据
cursor.fetchall() #获得sql查询结果的所有数据
#注意,fetch中得到的数据是以元组为形式的,如果需要得到字典形式的数据需要修改为
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#在我使用的数据里,得到的元组是一个二维元组,取出数据需要用tuple[i][0]的形式取出,不知道是否是普遍现象。

如果要对数据表进行增删查,需要提交到数据库,在增删查后增加

cursor.close()

另外在查询中如果带有参数(比如批处理过程),注意要防止sql注入。即不要在execute函数外拼接查询语句,在execute函数内带参数查询,具体形式类似于python格式化的print语句。

for i in range(len):
print(‘select records_read from task_metrics where stage_id=\’%s\’;’ % data[i])
cursor.execute(‘select records_read,local_bytes_read,remote_bytes_read,records_read,memory_bytes_spilled,disk_bytes_spilled,shuffle_records_written
from task_metrics where stage_id=\’%s\’ into outfile \’/var/lib/mysql/tmp/task_%d.csv\’
fields terminated by \’,\’
optionally enclosed by '”\’
lines terminated by \’\n\’;’%(data[i][0],i))

带参查询注意字符转换