CLI Tools2026年5月11日·1 分钟阅读

sqlite-utils — Python + CLI for ETL Into SQLite

Simon Willison's Python library + CLI for getting messy CSV/JSON/YAML into SQLite. Auto-schema, upserts, joins, FTS indexing one-liners.

Agent 就绪

这个资产可以被 Agent 直接读取和安装

TokRepo 同时提供通用 CLI 命令、安装契约、metadata JSON、按适配器生成的安装计划和原始内容链接,方便 Agent 判断适配度、风险和下一步动作。

Stage only · 15/100Stage only
Agent 入口
任意 MCP/CLI Agent
类型
CLI Tool
安装
Single
信任
信任等级:New
入口
Asset
通用 CLI 安装命令
npx tokrepo install 19225473-fe66-4ace-9440-b908b703af81

简介

sqlite-utils 是 Simon Willison 跟 Datasette 配套的 Python 库 + CLI —— 把杂乱的 CSV / JSON / YAML / JSONL 灌进 SQLite,自动推断 schema,再用一行命令做 enrich、transform、upsert、全文检索索引。适合数据新闻导入、日志摄入、agent 记忆库、任何「我有数据,想能查」的任务。兼容现代 Python + SQLite 3.31+。装机时间 2 分钟。


安装

pip install sqlite-utils

CSV → SQLite(一行命令)

# 从数据自动检测列类型,包括日期和整数
sqlite-utils insert data.db articles articles.csv --csv

# JSON 对象数组
curl https://api.example.com/articles | sqlite-utils insert data.db articles -

# JSONL 流
sqlite-utils insert data.db logs logs.jsonl --nl

加索引 + 全文检索

# 列上加 B-tree 索引
sqlite-utils create-index data.db articles category

# 跨列 FTS5 全文索引
sqlite-utils enable-fts data.db articles title body --create-triggers
# 之后这就快了:
sqlite-utils search data.db articles "machine learning"

Python API(比 CLI 更丰富)

import sqlite_utils
db = sqlite_utils.Database("data.db")

# 复合主键 upsert
db["articles"].upsert_all([
    {"id": 1, "title": "Hello", "category": "intro"},
    {"id": 2, "title": "World", "category": "intro"},
], pk="id")

# 加计算列
db["articles"].add_column("word_count", int)
for row in db["articles"].rows:
    db["articles"].update(row["id"], {"word_count": len(row["body"].split())})

# 原地变 schema
db["articles"].transform(
    drop={"old_column"},
    rename={"body": "content"},
    column_order=["id", "title", "content"],
)

跟 Datasette 配合

sqlite-utils insert data.db log access.csv --csv
datasette serve data.db   # 立刻拿到导入数据的 web UI + JSON API

FAQ

Q: 为啥不用 pandas + to_sql? A: 已经用 pandas 没问题。sqlite-utils 为 shell 优先 + 陌生数据设计 —— 自动 schema、upsert、FTS、JSON 流都是头等 CLI 命令不是 flag。多数新闻 / 日志处理任务在 shell 里更快搞定。

Q: 百万行级导入扛得住吗? A: 扛得住 —— SQLite 处理十亿级行。sqlite-utils 流式读 JSONL/CSV 不把整个文件加载内存。超大导入用 --batch-size 1000 控制事务大小。

Q: sqlite3 WAL 模式能用吗? A: 能 —— sqlite-utils 尊重已有 pragma。Datasette serve 的 DB 建议 WAL 模式,导入时读者不阻塞写者。


🙏

来源与感谢

Built by Simon Willison. Licensed under Apache-2.0.

simonw/sqlite-utils — ⭐ 1,700+

讨论

登录后参与讨论。
还没有评论,来写第一条吧。

相关资产