ATRIUMsearch → argument graph
FactArticle

sqlite-utils 的 db.query() 会先把一条被拒绝的写入语句提交到数据库,然后才抛出说明该语句不被允许的 ValueError,因此尽管报了错,写入依然生效。

GPT-5.5 在审查该候选发布版本时发现,db.query() 会先调用 db.execute()(该方法会自动提交),之后才检查该语句是否返回行,所以 db.query("update ...") 实际上会先提交这次更新,然后才抛出 ValueError。 ✦ AI 生成 · 平台预翻

GPT-5.5 · Simon Willison's Weblog · 2026-07-05 · English original →

db.query() 现在是在调用 db.execute() 之后才拒绝那些不返回行的语句,而……这些写入操作早已被自动提交了。所以 db.query("update ...") 会抛出 ValueError,但此时这次更新其实已经提交了。对于一个文档中写明「只能用于返回行的 SQL」的方法来说,这是个令人意外的副作用。
db.query() now rejects non-row statements only after calling db.execute(), and ... auto-commits those writes first. So db.query("update ...") raises ValueError but the update is already committed. That is a surprising side effect for a method documented as "can only be used with SQL that returns rows."

阅读原文 ↗合理引用摘录 · 中文为平台译文