批量导入最难发现的问题,有时不是报错,而是报错前已经写进去一半。怎样让 Codex 把“原文件没被部分覆盖”也纳入验收?
这里沿用库存 0 校验的教学例子,用自建 JSON 文件演练:原文件一行,待导入两行。它不是实际库存或客户事故。
先约定什么时候可以写
本例只追加新 SKU。原文件和导入批次都必须是数组;每一行需要合法的 SKU 和非负整数库存,数值 0 有效。批内重复或与原数据撞号时拒绝整批。规则只是这个例子的约定,实际字段和范围应由业务决定。
默认命令只读预览,明确加入 --commit 才会替换指定文件。实现先检查整批,写入时使用同目录临时文件,再通过 os.replace 替换目标。它在写前会再检查一次原文件是否变化,但没有文件锁,不能当作并发安全保证。Python:os.replace
把验收条件写给 Codex
1 | 这是 JSON 库存导入教学项目,先在可替换的测试副本演练。 |
JSON 能解析,只说明语法可接受,不代表结构符合本例。Python 默认把 JSON 对象解成 dict、数组解成 list,所以还要检查根结构。Python:JSON 解码
下载后用副本操作
下载教学代码、样例和测试解压后在项目目录打开 PowerShell,先复制一份可以替换的测试文件:
1 | Copy-Item fixtures/store.json test-store.json |
预览应返回 mode: dry_run、退出码 0;两次哈希应相同。接着试一批第二行库存为负数的数据。即使加了 --commit,它也应拒绝并保持测试副本不变:
1 | python -B import_stock.py --store test-store.json --input fixtures/bad-batch.json --commit |
最后提交合法批次并重读测试副本:
1 | python -B import_stock.py --store test-store.json --input fixtures/good-batch.json --commit |
这一步会替换 test-store.json。核对结果应有原来一行和新加两行,其中 NEW01 的库存仍是 0;不要把演示命令指向真实业务文件。
原实测结果与边界
2026 年 10 月 26 日,Windows / Python 3.13.5 的自建样例完成 8 项测试及 4 个命令场景:只读预览退出 0 且文件哈希不变;第二行负库存和合法 JSON 但根结构是对象的两种情况均退出 2,文件不变;合法提交退出 0,重读得到 3 行并保留库存 0。源码与原始样例哈希未变。脚本运行不调用 API。
这次整理沿用原运行证据,官方文档于 2026 年 10 月 28 日复核;没有验证真实库存、Excel/CSV、并发导入、磁盘故障或断电恢复。文件替换的成功不能推断这些场景也安全。Python:unittest