🛠 工具 / 开源
sqlite-utils 4.1 发布sqlite-utils 4.1
sqlite-utils 发布了 4.0 版本后的首个小版本更新 4.1,引入了多项次要新功能。其中,`sqlite-utils insert` 和 `sqlite-utils upsert` 命令现在支持 `--code` 选项,允许在插入或更新数据时执行 Python 代码进行转换。该版本进一步完善了命令行工具的数据处理能力,为开发者提供了更灵活的数据库操作方式。
Simon Willison
这是几天前发布 4.0 版本以来的第一个小版本更新,引入了一些次要的新功能。
sqlite-utils insert 和 sqlite-utils upsert 现在接受 --code 选项,用于提供一段 Python 代码(或 .py 文件路径),该代码定义了要插入的 rows() 函数或 rows 可迭代对象,作为从文件导入的替代方案。(#684)
sqlite-utils 已经具备允许将 Python 代码块作为 CLI 参数传递的功能,例如 sqlite-utils convert 命令的这个功能:
sqlite-utils convert content.db articles headline '
def convert(value):
return value.upper()'允许代码块直接生成新行是该模式的一个明显扩展:
sqlite-utils insert data.db creatures --code '
def rows():
yield {"id": 1, "name": "Cleo"}
yield {"id": 2, "name": "Suna"}
' --pk idsqlite-utils insert 和 sqlite-utils upsert 现在接受 --type column-name type 参数,以覆盖创建表时自动选择的类型。这对于 CSV 或 TSV 列(例如邮政编码)非常有用,它们看起来像整数,但应存储为 TEXT 以保留前导零。(#131)
这是一个长期以来的功能请求,结果证明实现起来非常简单。
新增 table.drop_index(name) 方法和 sqlite-utils drop-index 命令,用于按名称删除索引。两者都接受 ignore=True/--ignore 以忽略缺失的索引。(#626) sqlite-utils query 现在可以通过传递 - 代替查询语句来从标准输入读取 SQL 查询,例如 echo "select * from dogs" | sqlite-utils query dogs.db -。(#765)
还有两个小功能。我让 Codex 审查了所有未解决的问题,并突出了最容易解决的问题!
sqlite-utils upsert 现在可以推断现有表的主键,因此在向已有主键的表进行 upsert 操作时可以省略 --pk。
这是 Codex 的另一个建议,是 4.0 版本中发布的 Python 库改进中明显缺失的一个 CLI 功能。
table.transform() 和 table.transform_sql() 现在接受 strict=True 或 strict=False 来更改表的 SQLite 严格模式。省略该选项将保留现有模式。(#787) sqlite-utils transform 命令现在接受 --strict 和 --no-strict 来更改表的严格模式。(#787)
这两个功能是受 Evan Hahn 的《Prefer STRICT tables in SQLite》一文启发,该文今天在 Hacker News 上广为流传。Evan 指出:
遗憾的是,我认为没有办法通过 ALTER 将表变为严格模式。我认为你必须将数据从非严格表复制到严格表中。
这正是 sqlite-utils transform 机制所做的事情,因此我对其进行了扩展,增加了在严格表和非严格表之间切换的功能。
这是我用来实现这些新严格表功能的 GPT-5.6 Sol xhigh Codex 记录。我运行过的最有用的提示词之一是这个:
使用 uv run python -c 手动测试新的 .transform(strict=) 选项,看看能否发现任何边缘情况或错误
这实际上是让模型在它已经编写的自动化测试之外,手动测试其工作。这发现了两个小问题,随后我们进行了修复。
需要完整排版与评论请前往来源站点阅读。