全部产品

1.RPA连接MySQL数据库

更新时间:2020-03-03 16:53:44

RPA连接MySQL数据库

阿里云RPA可以使用进行MySQL数据库操作的主要第三方库主要四个,mysqlclient、PyMySQL、peewee和SQLAlchemy。下面我们主要介绍如何在RPA中使用PyMySQL操作MySQL数据库。

1. 环境准备

首先需要使用阿里云RPA的第三方库打包工具 rpapack 将本地python环境中的 PyMySQL 打包成RPA可识别的 rpax 文件,然后在阿里云RPA开发工具 studio 中就打包好的 PyMySQL.rpax 文件导入。

执行的命令:

  1. pip install PyMySQL # 先在本地的python环境中安装PyMySQL库
  2. pip install rpapack # 安装阿里云RPA的第三方库打包工具
  3. python -m rpapack PyMySQL # 打包PyMySQL

2.使用

2.1 使用方法说明

数据库连接

  1. connection = pymysql.connect(host='localhost',
  2. user='user',
  3. password='passwd',
  4. db='db',
  5. charset='utf8mb4',
  6. cursorclass=pymysql.cursors.DictCursor)

详细的参数说明请查看Connection Object

游标

连接完数据库,接着就该获取游标,之后才能进行执行、提交等操作
cursor = connection.cursor()
查询时,默认返回的数据类型为元组,可以修改返回类型
几种常用游标类型:

  • Cursor: 默认,元组类型
  • DictCursor: 字典类型
  • SSCursor: 无缓冲元组类型
  • SSDictCursor: 无缓冲字典类型

无缓冲游标类型,适用于数据量很大,一次性返回太慢,或者服务端带宽较小
创建连接时,通过cursorclass 参数指定类型:

  1. connection = pymysql.connect(host='localhost',
  2. user='root',
  3. password='root',
  4. db='db',
  5. charset='utf8',
  6. cursorclass=pymysql.cursors.DictCursor)

也可以在创建游标时指定类型:

  1. cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)

游标移动

所有的数据查询操作均基于游标,我们可以通过cursor.scroll(num, mode)控制游标的位置。

  1. cursor.scroll(1, mode='relative') # 相对当前位置移动
  2. cursor.scroll(2, mode='absolute') # 相对绝对位置移动

sql语句

我的习惯是先写好要操作的语句,如插入、更新、删除等,同时也要注意 pymysql 中所有的有关更新数据(insertupdatedelete)的操作都需要 commit,否则无法将数据提交到数据库。

  1. # 插入语句
  2. insert_sql = "insert into `jd_huawei` (`pid`, `url`, `price`, " \
  3. "`refprice`, `name`, `comment_num`, `comment_type`)values('%s','%s','%s'," \
  4. "'%s','%s','%s','%s')" % (info_id, info_url, price, refprice, name, comment_num, comment_types)
  5. # 查询语句
  6. select_sql = "select `pid` from `jd_huawei` where `pid`='%s'" % info_id

执行sql语句

cursor.execute(sql, args)
这里的参数 args 可以是,tuple,list,dict,另外 execute 还能返回受影响的行数。

  1. influence_num = cursor.execute(sql, args)
  2. print(type(influence_num)) # int


cursor.executemany(sql, args)可以批量执行SQL语句


查询获取数据

取出全部的数据,可以返回一个结果集

  1. cursor.fetchall()

取出一定数量的数据

  1. cursor.fetchmany(size)

取出一条数据

  1. cursor.fetchone()

事务处理

事务开始

  1. connection.begin()

提交修改

  1. connection.commit()

事务回滚

  1. connection.rollback()

关闭连接

关闭游标

  1. cursor.close()

关闭数据库连接

  1. connection.close()

2.2 PyMySQL示例

接下来我们来看一下PyMySQL的示例:
示例使用一个简单的表:

  1. # 表结构
  2. CREATE TABLE `users` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT, # id 整型 不能为空 自动增长
  4. `email` varchar(255) COLLATE utf8_bin NOT NULL, # 邮箱 可变字符串 区分大小写,不能为空
  5. `password` varchar(255) COLLATE utf8_bin NOT NULL, # 密码 可变字符串 区分大小写,不能为空
  6. PRIMARY KEY (`id`) # id 为主键
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
  8. AUTO_INCREMENT=1 ;
  9. # InnoDB 引擎 默认 utf-8 编码 区分大小写 自动增长从1开始
  1. import pymysql.cursors
  2. # 连接数据库
  3. connection = pymysql.connect(host='localhost',
  4. user='user',
  5. password='passwd',
  6. db='db',
  7. charset='utf8mb4',
  8. cursorclass=pymysql.cursors.DictCursor)
  9. try:
  10. with connection.cursor() as cursor:
  11. # 创建一条新的记录
  12. sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
  13. cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
  14. # 连接完数据库并不会自动提交,所以需要手动 commit 你的改动
  15. connection.commit()
  16. with connection.cursor() as cursor:
  17. # 读取单条记录
  18. sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
  19. cursor.execute(sql, ('webmaster@python.org',))
  20. result = cursor.fetchone()
  21. print(result)
  22. finally:
  23. connection.close()

这里注意连续用了两处 with 好处就在于 with 结束后会自动 close cursor 而免去了 cursor.close()

该示例输出:

  1. {'password': 'very-secret', 'id': 1}

相关链接

PyMySQL官方文档