Simon Willison 发布了 sqlite-utils 4.1.1。这个版本主要修复一个与 SQLite 外键、事务和表结构转换有关的边缘问题,适用于通过 Python API 或命令行操作 SQLite 数据库的开发者。

问题出现在调用 table.transform() 时:如果当前事务仍处于打开状态、PRAGMA foreign_keys 已启用,并且待转换的表被其他表通过外键引用,同时外键设置了 CASCADE、SET NULL 或 SET DEFAULT 等具有破坏性的删除动作,旧版本在重建表的过程中可能触发这些动作,导致引用行被静默删除或修改。
产生风险的原因是,SQLite 不允许在事务内部切换 PRAGMA foreign_keys。而 sqlite-utils 的表转换流程需要暂时删除旧表,删除动作一旦与外键规则叠加,就可能影响其他表中的数据。
从 4.1.1 开始,遇到上述组合条件时,table.transform() 会直接抛出 TransactionError,阻止危险转换继续执行。升级后如果出现该异常,开发者应先结束当前事务,再根据官方文档提供的外键与事务处理方式完成结构变更。
新版还改善了文档导航:命令行文档会链接到对应的 Python API,Python API 文档也会反向链接到等效的命令行操作,方便两种使用方式之间相互查找。
原文来源:Simon Willison’s Weblog,发布于 2026 年 7 月 12 日。查看英文原文