17-01 书目修改记录
题目
先推导:新旧字段在哪里保存,哪个批次触发变化。完成时核对:修改一次后能比较前后值,再采集不增加假修改。
推导与做法
先按 source_id 读旧字段,再比较规范化后的新字段。完全相同就结束;确有变化时,在同一事务内写 changes 的 before、after、batch,再更新正式书目。
演示 batch-1 新建,batch-2 把 finished 改成 True,batch-3 再采集相同内容。修改表只有 batch-2 一行,能比较前后值,重复采集不会产生假的历史。
过程图
%% 每个节点保留输入、执行位置或执行后的实际状态。
flowchart TD
S0["batch1保存未读字段"]
S1["batch2比较出已读变化"]
S0 --> S1
S2["同事务保存前后值与batch2"]
S1 --> S2
S3["batch3相同字段:不增加假历史"]
S2 --> S3
classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A
linkStyle default stroke:#4657B5
实现与运行
查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。
在配套目录的 综合项目与交付/model_project 中运行。先按项目 README 执行 uv sync --locked。
# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch17.py" 17-01
程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
[
[
"b101",
"batch-2",
"{\"finished\": false, \"title\": \"Python\"}",
"{\"finished\": true, \"title\": \"Python\"}"
]
]