sqlite-utils:把SQLite命令行操作浓缩成几条命令
sqlite-utils:把SQLite命令行操作浓缩成几条命令
sqlite-utils 在 GitHub 上拿到了 2,056 Star。

Simon Willison 写了这个 Python 工具,专治 SQLite 命令行的日常痛点。JSON 管道直接建表入库、CSV 当场变 SQL 查询、全文搜索一行配好。它还支持 SQLite 原生 ALTER TABLE 不支持的 DDL 操作:改列类型、删列、拆表规范化,一个命令完成。
1、这东西解决什么
SQLite 自带的 sqlite3 命令行够用,但麻烦。导入 JSON 要手动写建表语句、推断字段类型;CSV 导入要记 .mode csv;想改个列类型,SQLite 告诉你 ALTER TABLE 不支持。
sqlite-utils 用一条管道就全搞定了:
curl https://api.github.com/repos/simonw/sqlite-utils/releases \
| sqlite-utils insert releases.db releases - --pk id
它会自动识别 JSON 结构、推断类型、建表、插入数据,一气呵成。
另一种用法:sqlite-utils memory。数据不进磁盘,直接在内存里跑 SQL:
cat dogs.csv | sqlite-utils memory - "select name, age from stdin"
join、group by、子查询一个不少。CSV 和 SQL 之间,隔着一条命令的距离。
2、不止导入
很多人把 sqlite-utils 当入库工具用,它的主要价值在 DDL 操作上。
SQLite 的 ALTER TABLE 只支持重命名表和添加列。改列类型、删列、重命名列都做不到。sqlite-utils 的 transform 命令补上了这个缺口。它在背后自动重建表、迁移数据:
sqlite-utils transform mydb.db mytable --type old_column integer
全文搜索(FTS)也只要一行:
sqlite-utils enable-fts mydb.db mytable title body
建完索引就能按相关度排序查询,查文档、搜日志都顺手。
还有 extract 命令。表里某列有大量重复值,以文章表的"分类"为例,一条命令拆成独立分类表并自动建外键。数据规范化,自动化完成。

3、当库用也行
Python 里 import 直接用:
import sqlite_utils
db = sqlite_utils.Database("demo.db")
db["dogs"].insert_all([
{"id": 1, "age": 4, "name": "Cleo"},
], pk="id")
支持插件机制,可注册自定义 SQL 函数。作者围绕它还建了一个生态:Datasette(数据库发布与探索工具)、dogsheep(个人数据分析工具集),都跑在 sqlite-utils 上面。
4、适合谁
- 用 Python 做数据清洗,不想在 pandas 和 SQL 之间来回切
- 写爬虫的,抓到 JSON 直接落库,不用每次手写建表
- 做临时数据分析,杂七杂八的 csv/json 转成可查询的格式
- 搭小项目不想装 PostgreSQL/MySQL,SQLite 加上这个工具够用
一句话:你会碰 SQLite,这东西就能帮你省掉大量重复劳动。
浙公网安备 33010602011771号