用 Codex 做批量导入:先校验整批,再写文件

批量导入最难发现的问题,有时不是报错,而是报错前已经写进去一半。怎样让 Codex 把“原文件没被部分覆盖”也纳入验收?

这里沿用库存 0 校验的教学例子,用自建 JSON 文件演练:原文件一行,待导入两行。它不是实际库存或客户事故。

先约定什么时候可以写

本例只追加新 SKU。原文件和导入批次都必须是数组;每一行需要合法的 SKU 和非负整数库存,数值 0 有效。批内重复或与原数据撞号时拒绝整批。规则只是这个例子的约定,实际字段和范围应由业务决定。

默认命令只读预览,明确加入 --commit 才会替换指定文件。实现先检查整批,写入时使用同目录临时文件,再通过 os.replace 替换目标。它在写前会再检查一次原文件是否变化,但没有文件锁,不能当作并发安全保证。Python:os.replace

把验收条件写给 Codex

1
2
3
4
5
6
这是 JSON 库存导入教学项目,先在可替换的测试副本演练。
只追加新 SKU,检查根结构、每行类型与范围、批内重复和原数据撞号。
默认只读预览;明确 --commit 才写指定副本,整批通过后再写。
保留输入,不边读取边覆盖;校验失败后核对原文件哈希不变。
合法写入后重读,核对旧行、新行和数值 0。
保存命令、退出码、实际结果及未覆盖范围。

JSON 能解析,只说明语法可接受,不代表结构符合本例。Python 默认把 JSON 对象解成 dict、数组解成 list,所以还要检查根结构。Python:JSON 解码

下载后用副本操作

下载教学代码、样例和测试

解压后在项目目录打开 PowerShell,先复制一份可以替换的测试文件:

1
2
3
4
5
6
Copy-Item fixtures/store.json test-store.json
Get-FileHash test-store.json -Algorithm SHA256
python -B test_import.py
python -B import_stock.py --store test-store.json --input fixtures/good-batch.json
$LASTEXITCODE
Get-FileHash test-store.json -Algorithm SHA256

预览应返回 mode: dry_run、退出码 0;两次哈希应相同。接着试一批第二行库存为负数的数据。即使加了 --commit,它也应拒绝并保持测试副本不变:

1
2
3
python -B import_stock.py --store test-store.json --input fixtures/bad-batch.json --commit
$LASTEXITCODE
Get-FileHash test-store.json -Algorithm SHA256

最后提交合法批次并重读测试副本:

1
2
3
python -B import_stock.py --store test-store.json --input fixtures/good-batch.json --commit
$LASTEXITCODE
Get-Content test-store.json -Raw

这一步会替换 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