从 Excel 迁移到数据库:一个交易员的选型心路
- 2026-09-22 13:13:47
上一篇讲了 Excel 版本地狱(《Excel 版本地狱自救》),评论区有人问:那答案是什么?答案就是这篇——把 Excel 变成数据库。
先说结论:不是"要不要迁",是"先迁哪一部分"。因为迁移有成本,Excel 也有它不可替代的场景。这篇讲清楚三件事:为什么迁、怎么选、迁移中最容易踩的坑。
———
一、我的迁移触发点:一个 20MB 的 Excel
我的触发点是价格数据。
四年多的日前/实时价格,96 点 × 两个市场,堆在一个 Excel 里涨到 20MB。症状你们可能很熟:
·打开慢:双击之后去倒杯水,回来还在转圈。pandas 读一次 30 秒起。
·改不动:每次补新数据都要全表读写,脚本跑一半被 Excel 进程锁住文件,直接崩。
·不敢动:20MB 的表,谁都不敢碰格式,公式改坏一个单元格,下游全错。
判断标准很简单:当你的数据文件开始"三慢一怕"——打开慢、写入慢、查询慢、怕误删——就该迁了。
反过来说,如果你的表就是几万行、结构稳定、同事都要打开看——不迁,Excel 挺好。迁移不是政治正确,是成本收益。
———
二、选型:为什么是 SQLite,不是 MySQL
一开始我也纠结过要不要上 MySQL。真去搭了一遍之后,放弃了。对比给你:
维度 | MySQL/PostgreSQL | SQLite |
部署 | 装服务、配账号、开端口 | 一个文件,零部署 |
备份 | dump 导出 | 复制文件就是备份 |
Python 调用 | 驱动 + 连接串 | 标准库自带 sqlite3 |
多人协作 | 强项 | 弱项(写锁是库级的) |
性能 | 百万级以上依然稳 | 百万行级完全够用 |
关键认知:我的数据量是几十万行,不是几亿行;我的用户是我自己,不是一百个人。这种场景上 MySQL 是杀鸡用牛刀——刀还特别难保养。
SQLite 的哲学完美匹配个人数据基建:一个业务域一个 .db 文件。价格库、气象库、预测库各自独立,想分享哪个数据就拷哪个文件,想回滚就整个文件换回去。
还有一个隐藏好处:文件名即文档。price_cache.db、weather_era5.db,新人看到文件名就知道里面是什么。比"价格数据_最终版_2026新/表3"清楚一百倍。
———
三、迁移实操:核心就一步半
第一步:读进来,写进去
import pandas as pd
import sqlite3
df = pd.read_excel('日前价格_全量.xlsx')
conn = sqlite3.connect('price.db')
df.to_sql('da', conn, if_exists='replace', index=False)
conn.close()
四行代码,迁移完成。20MB 的 Excel 变成一个几 MB 的库文件,pandas 读取从 30 秒降到1 秒以内。
那半步:加约束(这步决定迁移成不成功)
光搬过去只是换了壳。真正让数据库比 Excel 强的是约束:
CREATE UNIQUE INDEX idx_da ON da(date, slot);
这一行 UNIQUE 索引的意思是:同一个日期同一个时点,物理上不允许存在两条记录。
在 Excel 里,重复粘贴一次数据就是事故——你可能三个月后画图时才发现多了一倍的数据。在数据库里,重复数据根本进不去,入库脚本会直接报错拦住你。
我的血泪经验:每个表都要有唯一键,唯一键要在建表第一天就定好。后来我所有的入库脚本都遵循一条铁律——重复导入同一份数据,结果必须是幂等的(覆盖旧值,而不是追加重复行)。
———
四、迁移之后什么变了
迁移后的第一周,体感变化不大。第一个月,变化出来了:
1.所有脚本变快了。原来每个脚本各自读一遍大 Excel,现在各自查库,加载时间从分钟的量级消失。
2.敢写自动化了。数据源稳定了,才敢在上面搭每日自动调度。Excel 时代想都不敢想——脚本跑到一半文件被人打开,全链路崩。
3.数据开始有"户口"了。哪个表、什么粒度、从哪来、多久更新,一张地图说清楚。找数据从"翻文件夹"变成"查地图"。
现在我的库已经按业务域拆成了几块:实际数据一个库、预测数据一个库、交易记录一个库。库与库之间靠日期和时段字段对齐,互不污染。
———
五、三个坑(每个都替你踩过了)
坑一:同名库先查表再动手。 迁移到中期,桌面上出现过两个 price.db,路径不同、内容不同、结构不同。写到脚本里的路径错了,程序不报错,只是安静地读写了一个空库。从此立规矩:动任何库之前,先 `SELECT COUNT(*) FROM 表` 看一眼行数和时间范围。
坑二:别在 Excel 开着的时候迁移。 Windows 下 Excel 会锁文件,pandas 偶尔能读但读出来的是半缓存状态。关掉再迁。
坑三:迁完别删原始 Excel。 至少留三个月。数据库是新的,入库脚本也是新的,谁也不能保证第一次迁移没丢数据。原始文件放归档文件夹,冷存储不碍事。
———
写在最后
从 Excel 到数据库,本质上是一个身份转变:从"表格的使用者"变成"数据的所有者"。
表格的使用者关心的是"这张表长什么样";数据的所有者关心的是"数据从哪来、存在哪、谁在用、坏了怎么恢复"。后者才是数据基建的起点——下一期就聊聊:为什么我说"数据基建不是 Excel 换皮"。
———
专栏:🅰 电力交易 + AI 自动化 · 第 4 篇
时间:2026-08-24
作者:爱折腾的电力交易
知乎/公众号同步更新。
