我長期以來一直在思考,我的 sqlite-utils Python 函式庫和 CLI 工具,如果能有一個資料庫通用的版本會是什麼樣子。今天早上(這確實是一個在淋浴時想到的專案),我請 Codex 和 GPT-5.6 Sol Ultra 協助建立一個原型:

進行一項快速研究,看看要建立一個與 SQLite-utils 具有相同核心 API 的函式庫需要什麼,特別是 insert、upsert、insert_all、upsert_all 以及 create 和 update 方法,還有表格內省功能。但其底層需由 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 資料庫,其結構會自動匹配檔案:

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 秒。