# Codex 数据库迁移教程：给书库增加借阅记录，失败后恢复原库

Codex 数据库迁移教程。已真实建临时SQLite库、独立备份、迁移、外键失败回滚和备份恢复；没有把数据库放入公共下载。

## 开始

先读 task.md 和 prompt.md。starter 是可打开但未实现任务逻辑的起点工程，reference 是本站人工完成的参考。目标代理没有参与生成此次原生账号会话，不能把参考代码称为该产品已执行结果。

```bash
cd reference
python3 verify.py
```

HTTP网页访问 http://127.0.0.1:8073/ ，按顺序点击输入、操作和导出控件。8073是示例端口，可自行换用空闲端口。

## 文件

- starter/：起点工程及明确需求。
- reference/：可运行人工参考、原创输入和实际运行结果。
- task.md：七步任务和独立验收。
- verify.py：回读实际下载文件、结果结构和边界的检查。
- native-*-draft.*（若有）：原生结构草案，明确未完成导入/运行验证。

## 本题操作要点

1. reference/library.py中的BOOKS定义10本虚构书，第3本author为None。verify.py只在临时目录建库，公共包不包含数据库文件。

2. 调用sqlite3连接的backup接口生成独立备份，恢复时写到另一个临时文件。只看文件存在不算备份有效。

3. 迁移函数在事务中增加loans外键表，并用PRAGMA user_version区分v1/v2。已有v2明确返回already-v2。

4. 成功分支插入图书1/2的虚构借阅人，再查询归属；前后10本书的全部字段与空作者应保持。

5. 失败演练故意引用不存在的book_id=999，必须得到FOREIGN KEY constraint failed并回滚；不拿真实业务库做这个试验。

6. 从独立备份恢复另一个文件，把版本、表结构和10行内容与原始快照比较。JSON结果保留恢复相同与失败事务已回滚两项。

7. 运行 python3 verify.py 可再次执行全套演练；结果写为result.json。关闭连接后临时库自动清理，正文截图回读的是这次实际结果。

## 官方依据

- https://developers.openai.com/codex/cli
- https://www.sqlite.org/lang_altertable.html
- https://docs.python.org/3/library/sqlite3.html

Google与抖音查询词是内容目标，不代表实测搜索量、热榜或流量结果。
