ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

影刀RPA报错排查手册:写入数据库报错——字段类型与长度不匹配

影刀RPA报错排查手册:写入数据库报错——字段类型与长度不匹配 影刀RPA报错排查手册写入数据库报错——字段类型与长度不匹配流程跑到最后一步数据库批量插入数据弹一行红字将截断字符串或二进制数据前面采集了两小时的几千条数据卡在入库口一条都没进去。用影刀RPA做电商数据采集的几乎人人都撞过数据库写入报错这堵墙而其中一大半都栽在字段类型和字段长度上。我在给TEMU店铺做商品数据入库时光这个报错就排查过四次每次原因还不一样干脆写成一篇手册。先给一个总纲数据库写入报错的排查永远从数据长什么样、表里字段什么样两边对照开始而不是从流程开始。流程只负责搬运错都在数据和表结构的匹配上。现象与五步排查法先认报错再动手。下面五步是我每次都走的固定路径。把报错截图或文字存下来确认具体报错码常见的有将截断字符串或二进制数据、Duplicate entry、No database selected、2013 Lost connection在数据库客户端里执行一次DESC表名把每个字段的类型和长度抄下来比如varchar(50)、decimal(10,2)用打印日志指令把待插入的一行数据打印出来逐个字段和表结构对照重点看超长字段、日期字段、数字字段确认【连接数据库】指令里连接字符串指向的库和执行SQL时操作的表是同一个库单条测试通过后再用【数据库批量插入数据】指令跑全量注意这个指令是全部成功或全部失败一条错全军覆没第四步的坑我专门说一句影刀RPA的【连接数据库】指令用连接字符串建连接对象后续指令都可以引用这个变量。如果你创建数据源时没有选到具体数据库执行SQL时会报No database selected两种修法创建数据源时在下拉里选择指定数据库或者在SQL语句里写全 库名.表名。根因一字段长度不够——截断报错的完整修法将截断字符串或二进制数据是最高频的入库报错官方文档给的原因就一句话入库数据的字段长度超出了数据库中表字段长度。但实际操作里怎么定位是哪个字段超了有讲究。我踩过的实例采集TEMU商品标题页面展示的标题看着不长实际源数据里藏着推广码和变体后缀最长的一条900多个字符而表里title字段是varchar(255)。批量插入直接整批失败。修复动作分两步。先在数据库客户端改字段ALTER TABLE 表名 MODIFY title varchar(1000)把长度放大到业务上限。再到影刀RPA流程里加保险在数据库批量插入数据指令前加一段Python模块代码做清洗# 输入fields 是一行数据的列表limits 是各字段的最大长度列表# 输出截断超长字段后的一行数据保证入库不触发截断报错deftrim_fields(fields,limits):result[]forvalue,limitinzip(fields,limits):ifisinstance(value,str)andlen(value)limit:# 超长的文本字段截断到限制长度并打上标记方便回查result.append(value[:limit-3]...)else:result.append(value)returnresult可视化流程里用调用Python模块指令接住返回值再喂给批量插入指令。这样即使以后网站改版又冒出超长字段流程也不会整批报废。类型不匹配同样要盯。最典型的是价格字段页面抓下来是¥89.90这种字符串直接插decimal(10,2)字段会报错或插成脏数据。入库前用Python或字符串处理指令把货币符号去掉转成数字。日期字段还有个经典坑——Excel写入日期时间数据时少了8个小时是时区问题数据库同理datetime字段入库前统一转成东八区再插。根因二唯一键冲突——Duplicate entry的处理报错Duplicate entry的含义是主键或唯一键字段重复插入。比如你把商品ID设了唯一索引重跑一次采集流程同样的ID再插一遍就报错。处理方式按业务定。允许覆盖的把INSERT改成INSERT … ON DUPLICATE KEY UPDATE允许跳过的插入前先用【执行SQL语句】查一下这个ID存不存在配合If条件判断存在就跳过都不允许的那就是数据源本身有问题核对插入的数据。官方文档给的方向也是两条调整表字段设置或核对插入的数据。我自己用的是先查后插结构【执行SQL语句】查ID结果存变量If条件判断取到的行数大于0走UPDATE分支等于0走INSERT分支。子流程封装成幂等入库模板后所有采集项目复用重跑多少遍都不会脏库。根因三驱动与字符集——插入卡住和连接丢失的真相有两类报错看起来和字段无关其实根源在连接层配置一并放进这篇手册。第一个是插入数据时流程卡住不往下走。官方文档点明了原因插入数据包含特殊字符比如zl影刀中间夹着不可见特殊字符普通驱动处理不了。修法是创建数据源时选择MySQL ODBC 8.0 Unicode Driver它提供更多字符集支持也就是多语言支持而MySQL ODBC 8.0 ANSI Driver只针对有限字符集范围。配置路径打开ODBC数据源管理程序点添加按钮驱动列表里选Unicode那个填完各项参数点OK提交。第二个是报2013 Lost connection to MySQL server during query大查询或大插入时连接超时断开。如果你走Python协同连库在pymysql.connect里加read_timeout参数调大等待时长# 输入数据库地址、端口、账号密码、库名# 输出一个设置了600秒读超时的数据库连接对象importpymysqldefmain(args):connpymysql.connect(host127.0.0.1,port3306,userasit,# 数据库账号passwordxxxx,# 数据库密码dboms_biz,# 目标库名charsetutf8,# 字符集用utf8防中文乱码read_timeout600)# 读超时600秒大查询不中断returnconn还有两个连接层小坑顺手记下连接时报用户登录失败是设置数据连接属性时没勾选允许保存密码回去勾上再确定CSV数据导入SQL Server遇到生僻字报语法错误是把编码指定成了20936GB2312改成936GBK即可GBK是GB2312的扩充收录了更多生僻字。驱动位数的坑也必须提ODBC必须装32位驱动还是64位取决于你的影刀版本——用64位影刀就配置64位的数据源用32位影刀就配置32位的数据源。装反了连接字符串怎么填都连不上。安装MySQL ODBC驱动时如果报缺组件装一个Visual Studio 2019的运行库就能解决。全链路复习从采集到入库的标准流水线数据库这一环讲透了把它放回整条流水线看你会发现报错排查能力其实是整套知识的综合运用。认识安装客户端安装、Chrome插件安装、界面左侧应用列表右侧指令面板的布局元素定位捕获商品标题元素时用XPath的contains模糊匹配CSS选择器处理动态class正则清洗抓回来的文本变量类型二维列表是批量插入的标准输入格式比如[[‘影刀’,1],[‘RPA’,2]]字典和JSON用来组装API返回的结构流程控制For次数循环分页循环相似元素抓列表页If判断处理翻页到头Try-Catch保证一条数据出错不炸全流程网页自动化等待元素出现再抓取懒加载页面滚动加index去重iframe里的表格要先切进去数据处理Excel读取原始数据、文本清洗、数据库查询批量插入关闭四步闭环五个常见报错都在上面鼠标键盘图像验证码用OCR或图像识别兜底桌面版ERP用图像点击按钮进阶技能HTTP请求直接调API入库比页面采集更快Python的pymysql处理超时重试ADB采集APP端数据平台实战淘宝、拼多多、TEMU的采集字段不同入库表结构要跟着平台的字段特性预留长度系统联动入库成功后发飞书消息报数失败发邮件告警工程化规范连接、插入、关闭拆成子流程命名带平台和动作企业版可以用资产管理统一存连接配置建表规范入库报错要从表设计开始防排查做多了你会发现大部分入库报错其实是建表时埋的雷。我现在的建表规范有四条照着做能挡掉八成报错。文本字段长度按业务上限乘二预留标题varchar(1000)、链接varchar(2000)、评论varchar(2000)别按页面展示长度建varchar(50)网站改版加个后缀你就截断了能用TEXT的描述类字段直接用TEXTMySQL的TEXT类型上限很大省得天天操心长度日期时间统一用datetime并明确时区来源采集时间和业务时间分两个字段存排序和排查都靠它价格字段用decimal禁止用float浮点误差在对账时是灾难数字与文本的转换是另一大坑。页面抓回来的价格带货币符号、销量带万字、库存可能带件入库前全部要清洗成纯数字。字符串处理用影刀自带的替换文本截取文本指令能解决一部分复杂的匹配提取就用正则表达式模块比如从已售2.3万里提出数字再乘一万。转换完最好用If条件做一次类型校验转换失败的数据落异常表别让一条脏数据废掉整批插入。批量插入的输入格式也要再强调一遍【数据库批量插入数据】指令的待插入数据只支持二维列表比如[[‘影刀’,1],[‘RPA’,2]]内层每行数据的字段顺序必须和SQL语句里的占位符一一对应。我从Excel读取区域拿到的就是二维列表直接能喂但列顺序对不上时会插错位报的错往往不着边际所以插入前打印一行数据核对列序是个便宜又有效的习惯。SQLite与轻量方案不是所有场景都要上MySQL补充一个轻量选择。个人用、单机跑、数据量几万条以内的场景SQLite比MySQL省事得多不用装服务、不用配ODBC驱动、一个文件就是数据库影刀RPA同样能通过数据库指令或Python的sqlite3模块操作。我早期的采集项目全是SQLite起步跑稳了、数据量上来了再迁MySQL迁移就是把连接字符串换掉的事。反过来说企业多人共用、需要并发写入、数据要给BI工具看的才值得上MySQL加ODBC那套完整配置。选型标准就一条部署和运维成本要和数据价值匹配。见过有人为了存每天两百条的数据专门装了MySQL集群后来光维护驱动升级就比写流程还费劲。事务意识也要有批量插入是全部成功或全部失败的原子操作这个特性既是保护也是风险数据量大时拆成几百条一批一批失败只重跑这一批别把十万条塞一个批次里赌运气。易错速查入库报错五条照例收尾上速查表五条覆盖数据库写入的高频报错。将截断字符串或二进制数据字段长度不够ALTER改长度流程里加截断清洗函数双保险Duplicate entry唯一键重复先查后插或改用ON DUPLICATE KEY UPDATENo database selected数据源没选库或SQL没写库名两处任选其一修插入卡住不报错数据含特殊字符ODBC数据源换MySQL ODBC 8.0 Unicode Driver2013 Lost connection连接超时pymysql加read_timeout600或分批插入减小单批数据量学习资源方面官方的影刀RPA高级课程数据库入门课视频把【连接数据库】【执行SQL语句】【数据库批量插入数据】【关闭数据库】四个指令讲得很细建议完整看一遍再动手。我把自己的电商入库模板——含字段清洗、幂等插入、失败重试的完整流程源码放在代码仓库 home.linyan.cloud可以直接参考改造表结构设计和截断清洗函数都写好注释了。#影刀RPA #RPA自动化 #报错排查 #数据库 #数据处理作者林焱
返回列表