openpyxl 两阶段导入:先预览、再确认,卡密数据不再"裸奔"
【摘要】 openpyxl 两阶段导入:先预览、再确认,卡密数据不再"裸奔"给卡密站点做账号库存导入时,我吃过一次亏:直接把用户上传的 XLSX 整表灌进数据库,结果里面混了两行测试账号和一行脏数据,清理了半天。从那之后,导入流程我都坚持做成两阶段——上传→预览确认。 阶段一:上传 + 解析,写暂存不写正式表from openpyxl import load_workbookdef parse_up...
openpyxl 两阶段导入:先预览、再确认,卡密数据不再"裸奔"
给卡密站点做账号库存导入时,我吃过一次亏:直接把用户上传的 XLSX 整表灌进数据库,结果里面混了两行测试账号和一行脏数据,清理了半天。从那之后,导入流程我都坚持做成两阶段——上传→预览确认。
阶段一:上传 + 解析,写暂存不写正式表
from openpyxl import load_workbook
def parse_upload(path):
wb = load_workbook(path, read_only=True, data_only=True)
ws = wb.active
rows = []
for idx, row in enumerate(ws.iter_rows(values_only=True), start=1):
account = (row[0] or "").strip()
password = (row[1] or "").strip()
if not account: # 空行直接跳过,顺手记下行号
continue
rows.append({"line": idx, "account": account, "password": password})
return rows
几点经验:read_only=True 大文件不吃内存;data_only=True 避免读到公式而不是值;空值统一先转成空字符串再 strip(),否则 None.strip() 直接炸。
阶段二:预览脱敏 + 业务校验,确认后才入库
解析出的行先渲染到一个预览页,关键列脱敏展示(比如账号只显示前 3 后 4 位),同时做三项校验:
- 格式校验:账号密码不能为空、长度符合规则;
- 去重校验:与已有库存池比对,重复账号标红并默认跳过;
- 批次管理:给这次导入生成一个批次号,入库时每行都带上,方便事后按批次删除或追溯。
用户在预览页点"确认导入"后,第二个请求才真正把数据写入库存表。两个阶段走两次 HTTP 请求,中间状态放 Redis 或服务端 session,不放前端——前端传回来的数据不可信。
为什么值得多这一步
- 防手滑:选错文件、表头错位,在预览页一眼就能发现,不用事后删库;
- 防脏数据:测试账号、重复行在确认前就被拦截;
- 可审计:批次号让每一次导入都有据可查,出问题能整批回滚。
导入是个"写操作",而所有不可逆的写操作都值得一次确认。这套两阶段模式代码量不大,但线上事故率是肉眼可见地降下来了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)