Simon Willison's Weblog

sqlite-utils 4.1

8.5内容质量

TL;DR · AI 摘要

sqlite-utils 4.1新增代码块插入、数据类型覆盖、索引删除等实用功能,显著提升SQLite数据库操作效率。

核心要点

  • 使用--code参数可直接通过Python代码生成插入数据,无需依赖文件导入
  • 新增--type参数可强制指定列数据类型,解决ZIP码等特殊字段存储问题
  • drop-index命令支持按名称删除索引,新增ignore选项避免缺失索引报错

结构提纲

按章节快速跳转。

  1. 介绍sqlite-utils 4.1主要改进方向及适用场景

  2. 通过--code参数实现动态数据生成的新方法

  3. 新增--type参数解决特殊列类型存储问题

  4. drop-index命令支持安全删除索引及错误处理

  5. query命令可从标准输入读取SQL查询语句

  6. 新增strict参数调整SQLite严格模式设置

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • sqlite-utils 4.1新特性
    • 数据操作增强
      • --code参数支持代码块生成数据
      • strict模式控制参数
    • 索引管理
      • drop-index命令支持名称删除
      • ignore选项错误处理
    • 类型处理
      • --type参数覆盖自动类型推断

金句 / Highlights

值得收藏与分享的关键句。

  • 通过--code参数可直接在CLI中定义rows()函数生成数据,如yield {"id":1, "name":"Cleo"}

    代码示例段落

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 处理ZIP码等需要保留前导零的字段时,--type参数可强制设置为TEXT类型

    第2个功能描述段落

    ⬇︎ 下载 PNG𝕏 分享到 X
  • drop-index命令新增ignore=True选项,可避免因索引不存在导致的异常中断

    第3个功能描述段落

    ⬇︎ 下载 PNG𝕏 分享到 X
#sqlite-utils#Python#数据库工具#SQLite
打开原文

发布:sqlite-utils 4.1

Simon Willison 的博客

订阅

#smallhead

由以下公司赞助:

Teleport

— 如何确保 AI 代理在您设定的边界内运行?Teleport 的《从零信任到代理信任》白皮书详细说明了需要哪些措施才能实现代理设计的承诺。

2026 年 7 月 11 日

发布

sqlite-utils 4.1

— 用于操作 SQLite 数据库的 Python 命令行工具和库

自几天前发布 4.0 版以来的首个小版本更新,新增了多项小幅功能改进。

sqlite-utils insert 和 sqlite-utils upsert 现在支持 --code 选项,可通过提供一段 Python 代码(或指向 .py 文件的路径)定义 rows() 函数或可迭代的行集合,作为从文件导入的替代方案。( #684 )

sqlite-utils 已经支持将 Python 代码块作为命令行参数传递,例如 sqlite-utils convert 命令的这个用法:

code
sqlite
-
utils
convert
content
.
db
articles
headline
'
def
convert
(
value
):
return
value
.
upper
()'

允许代码块直接生成新行是该模式的显而易见的扩展:

code
sqlite
-
utils
insert
data
.
db
creatures
-
-
code
'
def
rows
():
yield
{
"id"
:
1
,
"name"
:
"Cleo"
}
yield
{
"id"
:
2
,
"name"
:
"Suna"
}
'
-
-
pk
id

sqlite-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 库改进所缺失的一个显而易见的命令行功能。

table.transform() 和 table.transform_sql() 现在支持 strict=True 或 strict=False 参数,用于更改表的 SQLite 严格模式。省略该参数将保留现有模式。( #787 ) sqlite-utils transform 命令现在支持 --strict 和 --no-strict 参数来更改表的严格模式。( #787 )

这两个改进受到 Evan Hahn 的《SQLite 中优先使用 STRICT 表》的启发,该文章今天在 Hacker News 上广为传播。Evan 指出:

不幸的是,我认为目前没有方法可以通过 ALTER 命令将表改为严格模式。我认为你必须将非严格表中的数据复制到严格表中。

这正是 sqlite-utils transform 机制所做的,因此我扩展了它,增加了在严格模式和非严格模式之间切换表的能力。

这是我实现这些新严格表功能时使用的 GPT-5.6 Sol xhigh Codex 转录文本。我运行的最有用的提示之一是:

使用 uv run python -c 并手动测试新的 .transform(strict=) 参数,看看是否能找到任何边界情况或错误

有效指导模型在已有自动化测试之外手动测试其工作成果。这发现了两个较小的问题,我们随后进行了修复。

发布于晚上11:50

最新文章

  • 新的GPT-5.6系列:Luna、Terra、Sol - 2026年7月9日
  • sqlite-utils 4.0,现支持数据库模式迁移 - 2026年7月7日
  • sqlite-utils 4.0rc2,主要由Claude Fable编写(约149.25美元)- 2026年7月5日

#primary

这是Simon Willison于2026年7月11日发布的文章。

项目 546 Python 1,263 SQLite 478 sqlite-utils 233 注释版发布说明 60 AI辅助编程 395

月度简报

每月赞助我10美元,即可获得本月最重要的LLM发展的精选电子邮件摘要。

让我少发点邮件吧!

赞助并订阅

.metabox

#secondary

#wrapper

  • 披露信息
  • 附录
  • 版权
  • 2002
  • 2003
  • 2004
  • 2005
  • 2006
  • 2007
  • 2008
  • 2009
  • 2010
  • 2011
  • 2012
  • 2013
  • 2014
  • 2015
  • 2016
  • 2017
  • 2018
  • 2019
  • 2020
  • 2021
  • 2022
  • 2023
  • 2024
  • 2025
  • 2026