跳到主要内容
AI News HubLIVE
站内改写1 分钟阅读

sqlite-utils 4.1 发布

文章摘要

sqlite-utils 4.1 是 4.0 之后的第一个小版本,引入了多项新功能,包括通过 --code 选项允许用户在 insert 和 upsert 命令中直接嵌入 Python 代码生成行数据,以及通过 --type 选项覆盖列类型,支持对 CSV 或 TSV 中的邮政编码等字段强制存储为文本。此外,新增了 drop-index 命令和从标准输入读取查询的功能。还添加了在 transform 中切换 STRICT 模式的能力。

sqlite-utils 4.1 发布
报告错误

纠错通道尚未开通,可先复制下方文章信息留存。

查看更正说明
直接读正文

sqlite-utils 4.1 是自 4.0 发布几天后的第一个小版本更新,带来了多项实用的新功能。其中最引人注目的是 insert 和 upsert 命令新增的 --code 选项,允许用户直接在命令行中嵌入 Python 代码块(或指定 .py 文件路径),定义 rows() 函数或 rows 可迭代对象来生成待插入的数据行,无需再依赖文件导入。这一功能扩展了 sqlite-utils 已有的内嵌 Python 代码模式,例如先前在 convert 命令中使用的代码块。

另一个实用的新增是 --type 选项,用于在通过 insert 或 upsert 创建表时覆盖自动推断的列类型。这对于 CSV 或 TSV 中的 ZIP 码之类的列特别有用,它们看起来像整数,但为了保留前导零必须存储为 TEXT 类型。这是一个长期存在的功能请求,实现却相当简单。

在索引管理方面,新增了 table.drop_index(name) 方法和对应的 sqlite-utils drop-index 命令,用于按名称删除索引,同时支持 ignore=True/--ignore 选项忽略不存在的索引。此外,sqlite-utils query 命令现在可以通过传递 - 代替查询字符串来从标准输入读取 SQL,例如 echo "select * from dogs" | sqlite-utils query dogs.db -。

对于 upsert 操作,现在可以自动推断已有表的主键,因此在向已设置主键的表执行 upsert 时无需再指定 --pk,这是一个由 Codex 提示的简化改进。

最值得关注的新特性是 table.transform() 和 table.transform_sql() 方法现在接受 strict=True 或 strict=False 参数,用于切换表的 SQLite STRICT 模式。如果省略该参数,则保持现有模式。相应的,sqlite-utils transform 命令也新增了 --strict 和 --no-strict 选项。这一功能的灵感来源于 Evan Hahn 的《Prefer STRICT tables in SQLite》一文,文中指出无法通过 ALTER TABLE 直接更改严格模式,而 sqlite-utils 的 transform 机制正是通过复制数据到新表来实现此类变更,因此很容易扩展以支持严格模式切换。作者使用 GPT-5.6 Sol xhigh Codex 实现了该功能,并特别通过手动测试发现了两个小问题并修复。

展开要点与分析

文章情报

工程师进阶

要点

  • 引入 --code 选项,允许通过 Python 代码生成行数据进行插入或更新
  • 新增 --type 选项,用于在创建表时覆盖列类型
  • 添加 drop-index 命令和从标准输入读取查询的功能
  • table.transform() 支持 strict=True/False 切换严格模式

要点与分析由自动化流程生成,可能有误,请结合原始来源核实。