影刀RPA进阶教程:SQLite数据库存储实战——流程数据的本地持久化方案
很多影刀RPA用户习惯用Excel存数据。应付几百条数据没问题,一旦数据量上到几万甚至几十万条,Excel就顶不住了——打开慢、写入慢、还容易卡死。
SQLite是一个轻量级的数据库,不需要安装任何服务,一个文件就是整个数据库。影刀RPA的Python代码块能直接操作SQLite,几万条数据秒级写入。
为什么不用Excel了
| 对比维度 | Excel | SQLite |
|---|---|---|
| 写入10万条数据 | 3-5分钟 | 3-5秒 |
| 查询速度 | 依赖Excel函数 | SQL查询,毫秒级 |
| 并发读写 | 不支持 | 支持(有锁机制) |
| 数据量上限 | ~100万行 | 理论无上限 |
| 文件大小 | 100万行约50MB | 100万行约20MB |
| 部署复杂度 | 需要Office | Python标准库自带 |
结论:日常小数据量用Excel方便,但数据量大的采集任务建议转到SQLite。
影刀中操作SQLite
Python标准库自带sqlite3模块,不需要额外安装。
店群矩阵自动化突破运营极限!
创建数据库和表
importsqlite3# 连接到数据库文件(不存在则自动创建)conn=sqlite3.connect(r'C:\数据\电商采集.db')cursor=conn.cursor()# 创建商品数据表cursor.execute(''' CREATE TABLE IF NOT EXISTS goods ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, price REAL, sales INTEGER, shop_name TEXT, platform TEXT, collect_time TEXT DEFAULT (datetime('now','localtime')) ) ''')conn.commit()代码解释:
sqlite3.connect(文件路径):连接数据库,文件不存在自动创建CREATE TABLE IF NOT EXISTS:如果表不存在就创建,存在就跳过(不会重复建表覆盖数据)PRIMARY KEY AUTOINCREMENT:自增主键,每条数据自动生成唯一IDREAL:浮点数类型(存价格);INTEGER:整数(存销量);TEXT:字符串datetime('now','localtime'):SQLite内置函数,自动填入当前时间
批量插入数据
# 批量插入采集到的商品数据data_list=[('羽绒服男款加厚',299.0,1523,'品牌旗舰店','拼多多'),('冬季保暖内衣',89.9,8230,'保暖之家','拼多多'),# ...更多数据]cursor.executemany(''' INSERT INTO goods (title, price, sales, shop_name, platform) VALUES (?, ?, ?, ?, ?) ''',data_list)conn.commit()print(f'成功写入{len(data_list)}条数据')重点:executemany比循环execute快几十倍。在采集循环中先把数据攒成列表,循环结束后一次写入。
查询数据
# 查询销量前10的商品cursor.execute(''' SELECT title, price, sales, shop_name FROM goods WHERE platform = '拼多多' ORDER BY sales DESC LIMIT 10 ''')result=cursor.fetchall()forrowinresult:print(f'{row[0]}| ¥{row[1]}| 销量:{row[2]}')数据去重
SQLite的去重比Excel简单太多:
# 在插入前创建唯一索引,防止重复数据cursor.execute(''' CREATE UNIQUE INDEX IF NOT EXISTS idx_title_shop ON goods(title, shop_name)  ''')有了这个索引,同样的标题+店铺名插入时就会自动跳过,不需要自己写去重逻辑。
实战:采集数据直接入库
完整的采集→入库流程:
temu店群自动化报活动案例
# 完整流程伪代码# 1. 连接数据库(流程开始时做一次)conn=sqlite3.connect(r'C:\数据\电商采集.db')# 2. 采集数据(影刀指令:获取相似元素列表 → 循环提取)# 采集到的数据追加到列表# 3. 批量写入(采集完一页写一次)cursor.executemany('INSERT OR IGNORE INTO goods (...) VALUES (...)',data_list)conn.commit()# 4. 关闭连接(流程结束时)conn.close()关键原则:不要每采集一条就写一次数据库。攒够一批(比如一页50条)再批量写。
数据导出到Excel
SQLite存数据快,但日常查看还是Excel方便。导出的方法很简单:
importpandasaspd conn=sqlite3.connect(r'C:\数据\电商采集.db')# 查询需要导出的数据df=pd.read_sql_query('SELECT * FROM goods WHERE platform="拼多多"',conn)# 导出到Exceldf.to_excel(r'C:\数据\拼多多商品汇总.xlsx',index=False)conn.close()注意:这需要安装pandas模块。影刀的Python环境设置里搜pandas和openpyxl安装。
常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| “database is locked” | 同时有多个连接在写 | 确保流程里只有一个连接对象,用完就关 |
| 中文乱码 | 编码问题 | SQLite默认UTF-8,不乱码。检查其他环节 |
| 数据重复 | 没有唯一索引 | 加UNIQUE INDEX或INSERT时用OR IGNORE |
| 文件越来越大 | 删除数据不回收空间 | 定期执行VACUUM命令 |
#影刀RPA #RPA自动化 #SQLite #数据库 #数据持久化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。