欢迎光临
我们一直在努力

影刀RPA进阶教程:SQL入门十分钟——采集人够用的SELECT与WHERE

影刀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方式,这一步是我当年卡了一下午的地方。按下面顺序做:

  • 安装MySQL数据库(社区版免费),再装MySQL ODBC驱动
  • 打开Windows的"ODBC数据源管理程序",点"添加"按钮
  • 选择MySQL驱动,点"完成",填好服务器地址、端口、用户名、密码
  • 在影刀RPA里拖入【连接数据库】指令,点击"配置向导"
  • 提供程序选择"Microsoft OLE DB Provider for ODBC Drivers",选刚建的数据源,填用户名密码,勾选"允许保存密码",确定后连接字符串会自动填进编辑框
  • 关键坑: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语句】里用,把表名和字段换成你自己的就行。

    你想干什么用的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行是表头吗?不是,是数据的第一行。这里有两个实打实的坑:
    在这里插入图片描述

  • 跑SELECT,返回的是多行多列的结果集,但可能为空。取值之前先判断列表长度,空结果集直接取query_result[0][0]会报"索引超出范围"
  • 跑UPDATE、INSERT、DELETE这种没有结果集的语句,返回的是"受影响的记录条数",这个数字存放在第0行第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块里一定放【关闭数据库】——不关连接是后面第三篇要展开的大坑。

    流程环节用的影刀RPA能力
    翻页采集 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 #数据采集

    作者:林焱
    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 影刀RPA进阶教程:SQL入门十分钟——采集人够用的SELECT与WHERE
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址