影刀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模块,不需要额外安装。

在这里插入图片描述

店群矩阵自动化突破运营极限!

创建数据库和表

import sqlite3

# 连接到数据库文件(不存在则自动创建)
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:自增主键,每条数据自动生成唯一ID
  • REAL:浮点数类型(存价格);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()
for row in result:
    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)
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3025d293cc8d49f890e684f3d64ebcef.png#pic_center)

''')

有了这个索引,同样的标题+店铺名插入时就会自动跳过,不需要自己写去重逻辑。

实战:采集数据直接入库

完整的采集→入库流程:

temu店群自动化报活动案例

# 完整流程伪代码
# 1. 连接数据库(流程开始时做一次)
conn = sqlite3.connect(r'C:\数据\电商采集.db')

# 2. 采集数据(影刀指令:获取相似元素列表 → 循环提取)
# 采集到的数据追加到列表

# 3. 批量写入(采集完一页写一次)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8bf3622ea68a41aa986cab74f1896e26.png#pic_center)

cursor.executemany('INSERT OR IGNORE INTO goods (...) VALUES (...)', data_list)
conn.commit()

# 4. 关闭连接(流程结束时)
conn.close()

关键原则:不要每采集一条就写一次数据库。攒够一批(比如一页50条)再批量写。

数据导出到Excel

SQLite存数据快,但日常查看还是Excel方便。导出的方法很简单:

import pandas as pd

conn = sqlite3.connect(r'C:\数据\电商采集.db')

# 查询需要导出的数据
df = pd.read_sql_query('SELECT * FROM goods WHERE platform="拼多多"', conn)

# 导出到Excel
df.to_excel(r'C:\数据\拼多多商品汇总.xlsx', index=False)
conn.close()

注意:这需要安装pandas模块。影刀的Python环境设置里搜pandasopenpyxl安装。

在这里插入图片描述

常见问题

问题 原因 解决
“database is locked” 同时有多个连接在写 确保流程里只有一个连接对象,用完就关
中文乱码 编码问题 SQLite默认UTF-8,不乱码。检查其他环节
数据重复 没有唯一索引 加UNIQUE INDEX或INSERT时用OR IGNORE
文件越来越大 删除数据不回收空间 定期执行VACUUM命令

#影刀RPA #RPA自动化 #SQLite #数据库 #数据持久化

在这里插入图片描述

作者:林焱

在这里插入图片描述

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
在这里插入图片描述

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐