Simon Willison用AI辅助开发了数据库无关版sqlite-utils原型,基于SQLAlchemy支持PostgreSQL/SQLite/DuckDB。
我一直琢磨着,如果把我写的 sqlite-utils 这个 Python 库和 CLI 工具做成数据库无关(database agnostic)的版本会是什么样。今天早上(真的是洗澡时的灵感)我让 Codex 和 GPT-5.6 Sol Ultra 来构建一个原型:
做一次研究性探索,看看需要什么才能构建一个与 sqlite-utils 核心 API 相同的库——特别是 insert、upsert、insert_all、upsert_all、create、update 这些方法,以及表 introspection 相关的功能——但底层用 SQLAlchemy,这样就能支持多种数据库引擎
用 PostgreSQL 和 SQLite 以及 duckdb 做测试
参考 ~/dev/sqlite-utils
创建一个 git 仓库并尽早提交、用 uv init 启动项目——使用红/绿 TDD 和 pytest,参考 ~/dev/django-sql-dashboard 的 PostgreSQL 测试写法
只需要很少的后续提示,就做出了一个状态足够好的项目,得以作为 alpha 版本发布。
下面是一行命令,用来列出我本地 PostgreSQL 博客数据库中某个表的所有行:
uvx --with 'alchemy-utils[postgresql]' alchemy-utils rows 'postgresql+psycopg://simon@localhost:5432/simonwillisonblog' redirects_redirect
输出开头是这样的:
[
{
"id": 2328,
"domain": "simonwillison.net",
"path": "2020/May/21/apple-photos-sqlite/",
"target": "/2020/May/21/dogsheep-photos/",
"created": "2020-05-21T13:03:46.591692-07:00"
},
{
"id": 3,
"domain": "feeds.simonwillison.net",
"path": "swn-links",
"target": "https://simonwillison.net/atom/links/",
"created": "2017-10-01T14:12:54.820729-07:00"
}
又或者,你想用一个包含旧金山所有树木数据的 DuckDB 数据库,schema 会根据文件自动创建:
curl 'https://raw.githubusercontent.com/simonw/sf-tree-history/refs/heads/main/Street_Tree_List.csv' | uvx --with 'alchemy-utils[duckdb]' alchemy-utils insert 'duckdb:////tmp/trees.db' trees - --csv
(第一次运行这个命令花了将近一个小时,所以我让 Codex 做了优化,降到了 35 秒左右。)
现在我们有了一条时间线,记录 OpenAI 对 Hugging Face 的意外攻击——2026 年 8 月 7 日
用 Claude Fable 5 一击通关 Raccoon Heist 游戏——2026 年 8 月 5 日
LLM 新版本发布,支持 reasoning traces、OpenAI Responses、server-side tools 以及更智能的日志——2026 年 8 月 4 日
这是 Simon Willison 的报道,发表于 2026 年 8 月 12 日。
每月赞助 $10,即可获得当月最重要 LLM 动态的精选邮件摘要。
付费让我少打扰你!