影刀RPA进阶教程:SQL入门十分钟——采集人够用的SELECT与WHERE
做采集的人最后都会撞上同一堵墙:数据量一过几万行,Excel打开要等半分钟,筛选一次卡一次,影刀RPA流程跑到写表格那一步就开始拖慢。我去年把采集库从Excel迁到MySQL,最直接的感受就是,其实采集人根本不需要系统学SQL,会SELECT和WHERE这两个词,就能解决九成的问题。
这篇文章不讲数据库原理,只讲你在影刀RPA里采集数据时真正会用到的那几句SQL。SELECT负责取数据,WHERE负责筛数据,配合影刀的【连接数据库】和【执行SQL语句】两条指令,十分钟够用。
为什么采集人该把数据放进数据库
先说我自己的踩坑经历。之前用Excel存采集结果,一个.xlsx攒到40多万行,影刀RPA每次【读取区域】都要卡二十多秒,后来某天文件直接报"内存不足"打不开,一天的数据差点没了。
换成MySQL之后的变化很具体:

- 写入从每次30秒降到1秒以内(用批量插入)
- 随时用WHERE取"昨天某店铺"的数据,不用手动筛
- 多个影刀RPA流程可以同时往一张表里写,不用抢文件
如果你只是个把月的小量采集,Excel够用;但只要数据会持续积累,越早进数据库越省事。
数据库连接配置:ODBC这个坑必须先踩明白
影刀RPA连MySQL走的是ODBC方式,这一步是我当年卡了一下午的地方。按下面顺序做:
关键坑:ODBC必须安装32位驱动程序,而且64位影刀配64位数据源,32位影刀配32位数据源,两边位数必须一致。 我第一次就是装成了64位驱动,连接的时候怎么都报错,换32位驱动立刻通了。
【连接数据库】指令有两个参数要填:连接字符串(上面自动生成的那个),以及"保存数据库连接对象至"——起个变量名叫db_conn,后面所有数据库指令都靠它。

SELECT:从表里把数据拿出来
假设我们有一张采集结果表goods,字段是shop(店铺)、title(商品名)、price(价格)、collect_time(采集时间)。最基础的用法在影刀RPA里就是【执行SQL语句】指令,连接方式选"数据库连接对象",选db_conn,把SQL填进"数据库查询语句",结果保存到一个变量比如query_result。
— 取整张表(数据量大时千万别这么干)
SELECT * FROM goods;
— 只取需要的列,速度快很多
SELECT shop, title, price FROM goods;
— WHERE:只取某个店铺的数据
SELECT shop, title, price FROM goods WHERE shop = 'XX旗舰店';
— 组合条件:价格大于100且最近两天采集的
SELECT shop, title, price, collect_time
FROM goods
WHERE price > 100 AND collect_time >= '2026-09-25';
— 模糊匹配:商品名里含"手机壳"的
SELECT title, price FROM goods WHERE title LIKE '%手机壳%';
这些语句每一句都可以直接抄进【执行SQL语句】里用,把表名和字段换成你自己的就行。
| 取指定店铺 | WHERE shop = ‘店铺名’ |
| 取某价格区间 | WHERE price BETWEEN 50 AND 200 |
| 取多个店铺 | WHERE shop IN (‘A店’,‘B店’) |
| 模糊搜标题 | WHERE title LIKE ‘%关键词%’ |
| 排序后取前100 | ORDER BY price DESC LIMIT 100 |
新手最容易犯的错是把SELECT * FROM goods直接跑在几十万行的表上,影刀RPA会把整个结果集读进内存,轻则卡顿重则崩掉。我现在的习惯是永远带WHERE和LIMIT,用多少取多少。
执行SQL语句的返回值:list套list的坑要清楚
【执行SQL语句】指令保存的查询结果,变量类型是"字符串的列表的列表",也就是list套list。第0行是表头吗?不是,是数据的第一行。这里有两个实打实的坑:

指令面板里还有个"以文本格式输出"勾选项,勾上后每个值都会转成文本格式。我建议采集场景勾上,因为数据库里的数字型价格取出来和字符串拼接时经常报类型错误,统一成文本最省心。
WHERE配合变量:让SQL跟着流程走
固定的SQL用处有限,真正常用的是把影刀RPA里的变量拼进SQL。比如采集时间、店铺名是流程里动态得到的,用字符串拼接写进语句:
# 场景:把影刀RPA流程变量拼进SQL,取昨天采集的数据
# yesterday变量由"获取时间"指令格式化得到,形如2026-09-26
sql = "SELECT shop, title, price FROM goods WHERE collect_time >= '" + yesterday + "'"
# 拼好后交给【执行SQL语句】执行,结果存到query_result
拼接的时候引号是重灾区:SQL里字符串值要用单引号包住,所以Python字符串外面用双引号、里面留单引号,第一次写十个人有八个在这里报语法错。
顺带把其他模块串一遍:SQL不是孤立的
既然是进阶篇,快速把影刀RPA其它核心能力对着"数据库采集"这条线过一遍,每一块在这条业务里都有位置。

元素定位四合一。 采集网页数据靠的是元素捕获+XPath+CSS选择器+正则。捕获元素点下去出现橙色边框确认即可;XPath里//div[@class="price"]按属性取,//*[contains(text(),'¥')]模糊匹配;CSS选择器div.price干同样的事,写起来更短。我的选型习惯:简单页面用CSS,层级复杂、要参照物定位的用XPath,正则留到最后清洗价格数字。定位不稳的页面,XPath里别写很长的绝对路径,用相对路径加属性,改版了也不容易断。
变量与数据类型。 数据库场景里最常打交道的就是list套list(SQL返回值)、字符串(SQL拼接)、字典(网页字段映射)。字典取值遇到键不存在会报错,两个方案:先用"IF条件判断"检查键是否存在,或者用带默认值的取法,缺了就给空字符串,别让流程断在这。
流程控制。 分页采集用"相似元素循环"或For循环翻页;WHERE取回的结果要用ForEach列表循环逐行处理;把网页采集和入库包在Try-Catch里,Catch块放【打印日志】记录哪一行出了问题,Finally块里一定放【关闭数据库】——不关连接是后面第三篇要展开的大坑。
| 翻页采集 | For次数循环+翻页判断 |
| 逐行入库 | 数据库批量插入数据 |
| 单行失败兜底 | Try-Catch-Finally |
| 只在工作日跑 | If条件判断+获取时间 |
网页自动化。 三种等待别都用固定的"等待秒数",动态加载的列表用"等待元素出现",超时时间给足。采集详情页经常撞上弹窗,标准流程是先判断元素是否存在,存在就点关闭按钮,再继续采集。翻页按钮如果是"下一页"不确定总页数,判断它的disabled样式:元素存在且可点就点,不存在就退出循环。
鼠标键盘与图像自动化。 数据库这条线基本用不上图像识别,但登录MySQL可视化工具、处理一些没有元素的客户端软件时,模拟鼠标点击(默认模式)和驱动模式的选择要知道:普通网页用默认,特殊控件不响应就用驱动模式。虚拟键盘输入用于带下拉联想的搜索框。
进阶技能。 不爱拼SQL字符串的,可以在影刀RPA里点Python图标点亮Python模式,用xbot.ado接口更灵活:

# Python模式连数据库:open连接、exec执行、close关闭
from xbot import ado
def main(args):
db = ado.Database()
db.open('你的数据库连接字符串') # 连接
result = db.exec('SELECT shop, price FROM goods WHERE price > 100',
timeout_seconds=20) # 默认超时20秒,慢查询记得调大
db.close() # 用完必须关
return result
timeout_seconds默认20秒,跑聚合类慢SQL时记得调大,这个参数官方文档里写得明明白白,但很多人不知道,超时报错了还以为是网络问题。HTTP请求这条线也说一下:有些数据源本身有API,直接用HTTP的GET指令拉JSON,转JSON对象后取字段,比开浏览器采集还稳。
平台实战。 小红书采集回来的笔记数据、拼多多店铺商品的价格历史,都适合直接进MySQL。我这边的分工是:采集流程只管往表里INSERT,分析类的SELECT单独放一个查询流程,互不干扰。TEMU采集的价格带多币种,入库前用WHERE级别的思维先在SQL里统一过滤一遍异常值。
系统联动。 查询结果要推给人看,用飞书群机器人Webhook发消息,或者把查询结果写进飞书多维表格。定时跑的话,个人电脑用影刀RPA客户端的计划任务配置,企业场景用云端控制台发布计划任务给机器人,机器人状态分空闲、运行中、离线,发布前确认机器人不在线就先排查客户端。
工程化规范。 数据库流程我坚持三条:连接配置(连接字符串)放在流程开头只写一次;所有入库操作封装成子流程,参数传二维列表;子流程命名带编号如"010_数据入库",主流程一眼看清结构。社区版每天30分钟运行时长,跑大批量入库要留意,创业版无限制,按需选。
易错速查表:这5条我全都交过学费
| 连接数据库报驱动错误 | ODBC驱动位数与影刀位数不一致 | 装32位驱动,位数对齐 |
| 索引超出范围 | SELECT结果为空还去取值 | 先判断列表长度再取 |
| SQL语法报错 | 变量拼接少了单引号 | 字符串值两侧补单引号 |
![]() |
| 查询超时中断 | 默认20秒超时不够 | 调大timeout_seconds |
| 中文乱码 | 建库时字符集没选对 | 建库用utf8mb4 |
延伸阅读与下一步
SELECT和WHERE练熟之后,下一篇建议直接看数据归档那篇,把老数据定时搬去备份表,主表保持轻快。完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,连接配置和SQL模板都在里面。
学SQL本身,推荐两个免费途径:MySQL官方文档的教程章节,和B站上搜"SQL入门"挑播放量高的半小时入门视频就够,不用买课。
#影刀RPA #RPA自动化 #SQL入门 #MySQL #数据采集
作者:林焱






