当前位置: 首页 > news >正文

影刀RPA Python操作MySQL数据库:从连接到增删改查完整实战

影刀RPA Python操作MySQL数据库:从连接到增删改查完整实战

作者:林焱

影刀内置的数据库指令只支持SQLite,但现实中大多数业务系统用的是MySQL。这篇讲如何在影刀的Python代码块里连接MySQL,完成增删改查。

准备工作

安装MySQL驱动:

pipinstallpymysql

pymysql是纯Python实现的MySQL驱动,不需要安装额外C库,Windows下兼容性最好。比mysql-connector-python轻量,比MySQLdb好安装。

连接模板

importpymysql# 连接配置config={'host':'192.168.1.100',# 数据库IP'port':3306,# 端口'user':'your_username',# 用户名'password':'your_password',# 密码'database':'your_database',# 库名[video(video-UCajC8p9-1783622550236)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限!)]'charset':'utf8mb4',# 字符集(支持emoji)'connect_timeout':10# 连接超时}connection=pymysql.connect(**config)cursor=connection.cursor()

查询数据

# 查询所有商品sql="SELECT id, name, price, stock FROM products WHERE status = %s"cursor.execute(sql,('active',))results=cursor.fetchall()# results是一个元组列表:[ (1, '商品A', 99.00, 100), (2, '商品B', 199.00, 50) ]# 转成字典列表(方便后续处理)columns=[desc[0]fordescincursor.description]data=[dict(zip(columns,row))forrowinresults]foritemindata:print(f"{item['name']}: ¥{item['price']},库存{item['stock']}")

注意%s是参数占位符,不是字符串格式化。用%s传入参数可以防止SQL注入(pymysql会自动转义),不要用f-string%拼接SQL。

插入/更新/删除(同一模式)

try:# 插入sql="INSERT INTO products (name, price, stock) VALUES (%s, %s, %s)"cursor.execute(sql,('新产品',299.00,50))# 更新sql="UPDATE products SET price = %s WHERE id = %s"cursor.execute(sql,(259.00,1))# 删除sql="DELETE FROM products WHERE stock = 0"cursor.execute(sql)# 提交事务(查询不需要commit,增删改必须commit)connection.commit()print(f"影响行数:{cursor.rowcount}")exceptExceptionase:connection.rollback()# 出错回滚print(f"操作失败:{e}")

批量操作(影刀数据写入MySQL)

典型场景:影刀采集到1000条商品数据,批量写入MySQL:

# 影刀采集到的数据(假设是一个列表)products=[('商品A',99.00,100),('商品B',199.00,50),# ... 更多数据]![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0a02162fce6a4708a88df66c7291b2f4.png#pic_center)sql="INSERT INTO products (name, price, stock) VALUES (%s, %s, %s)"cursor.executemany(sql,products)# 一次插入多条connection.commit()print(f"成功插入{cursor.rowcount}条")

executemany比循环execute快得多,因为它把多条数据打包成一次网络往返发送。

实战:影刀采集 + MySQL存储完整流程

影刀定时触发 → 影刀采集网页数据 → Python代码块写入MySQL ↓ 影刀定时触发 → Python代码块查询MySQL → 影刀生成报表 → 影刀发送邮件

步骤1:写入(采集流程)

importpymysql# 从影刀变量拿到采集的数据collected_data=[...]# 影刀传入conn=pymysql.connect(**config)try:withconn.cursor()ascursor:# 先清空今日数据![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/91ee4f414e1b4bedbe553a282b79a5e5.png#pic_center)cursor.execute("DELETE FROM daily_sales WHERE date = CURDATE()")# 批量插入新数据sql="INSERT INTO daily_sales (date, product, sales) VALUES (CURDATE(), %s, %s)"cursor.executemany(sql,collected_data)conn.commit()finally:conn.close()

步骤2:读取(报表流程)

conn=pymysql.connect(**config)try:withconn.cursor()ascursor:sql=""" SELECT product, SUM(sales) as total FROM daily_sales WHERE date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY product ORDER BY total DESC """cursor.execute(sql)week_data=cursor.fetchall()finally:conn.close()# week_data返回给影刀,生成周报

踩坑实录

坑1:连接不关闭导致数据库连接数耗尽

MySQL默认最大连接数是151。如果每次查询都新建连接但不关闭,很快就会耗尽。务必用try/finally关闭连接,或者用with语句(pymysql的连接支持上下文管理器):

temu店群自动化报活动案例

withpymysql.connect(**config)asconn:withconn.cursor()ascursor:cursor.execute(sql)

坑2:中文乱码

两个地方都要设字符集:连接参数里设charset='utf8mb4',建表时设DEFAULT CHARSET=utf8mb4utf8mb4支持emoji,utf8只支持基本多语言平面(BMP)。

坑3:长时间空闲连接被MySQL断开

MySQL默认8小时无活动会自动断开连接。如果你的影刀流程两个数据库操作之间隔了很久,需要用conn.ping(reconnect=True)检查连接状态:

conn.ping(reconnect=True)# 如果断了自动重连cursor=conn.cursor()

坑4:安全性——密码不要硬编码

不要把数据库密码写在Python代码里。用配置文件(上一篇文章讲的YAML/INI)管理连接参数,或者用环境变量:

importos password=os.environ.get('DB_PASSWORD','')

写在最后

MySQL是RPA流程数据持久化的最佳方案。SQLite够轻量但不够强大,MySQL才能支撑起真正的业务数据流转。影刀负责从网页把数据拿回来,MySQL负责把数据存起来供后续分析——这是一个完整的自动化数据管道。

http://www.jsqmd.com/news/1158117/

相关文章:

  • 智能体行业落地拆解:政务 / 制造 / 金融三大场景技术方案
  • 2026年7月最新长春江诗丹顿官方售后客服中心地址电话及服务网点分布 - 江诗丹顿服务中心
  • d3d8to9:终极解决方案让Direct3D 8经典游戏在Windows 10/11上重获新生
  • 大数据毕设选题推荐:基于 Django 的多源 IT 招聘数据整合分析系统的设计与实现 基于 Django 的应届生 IT 求职辅助分析系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • jdk1.8的hashmap扩容时会发生数据丢失吗,大家来看看我的说法对不对
  • x265 MotionEstimate::motionEstimate 深度源码拆解
  • 2026五大AI编程助手实战选型指南:Cursor/Copilot/Windsurf/Amazon Q/Claude Code深度对比
  • AI大模型应用开发实战:从架构设计到工程落地的完整指南
  • MTK Audio HAL 录音流程深度解析:从 AudioRecord.read() 到 ALSA pcm_read() 的 12 个关键步骤
  • 2026年7月最新天梭成都武侯吾悦广场维修保养服务电话 - 天梭服务中心
  • 文化信息差变现:从麻将教程站看垂直领域SEO与流量转化策略
  • HBM 3D堆叠制造:从TSV硅通孔到中介层封装的5大核心工艺解析
  • 【VMware Workstation NAT 网络配置指南】
  • Godot游戏导出全攻略:从预设配置到多平台发布实战
  • web课程设计
  • 10_Openclaw安全合规工具域详解
  • 2026年中山东地区专业中空板周转箱销售厂家综合解析 - 品牌鉴赏官2026
  • CTF 编码入门|Base64 进制转换
  • 受欢迎的西宁茂枫商混站
  • Agent时代:企业AI接入内部系统,安全可控才是王道!
  • 南京爱彼回收价格查询及靠谱平台实测排行(2026年7月最新数据) - 爱彼中国官方服务中心
  • Muse智能体化图像生成:工具调用与自我优化技术解析
  • LabelImg 1.8.6 迁移至 Label Studio:3步完成项目升级与数据格式转换
  • STM32F103 矩阵键盘驱动优化:4x4扫描代码从5ms延时降到1ms响应
  • AI 辅助 API 文档生成与维护:从代码注释到交互式文档的完整链路
  • 小米账号解锁限制解析:每月1台与每年4台的策略与应对方案
  • 朗姆酒:从甘蔗到酒杯,一种充满加勒比阳光的烈酒
  • 2026年7月最新温州万国官方售后维修服务网点地址与客服电话 - 万国中国官方服务中心
  • 终极指南:3步免费下载百度文库任何文档(开源脚本完整教程)
  • 在 Visual Studio 中像 VS Code 一样查看每行代码的修改者