SQLite 命令行:用 .mode box 看表格,调试小数据更直观

26 次浏览2 条回复

临时看一个 SQLite 文件时,直接 select * 的输出经常挤在一起。SQLite 自带的命令行可以先设 .headers on 和 .mode box,字段边界会清楚很多。

环境:SQLite 3.33+。建个最小例子:

printf "create table task(id integer, name text, done integer); insert into task values (1, 'build', 0), (2, 'test', 1);" | sqlite3 demo.db
printf ".headers on\n.mode box\nselect * from task;" | sqlite3 demo.db

第二条命令会按带边框的表格打印列名和内容。只想给脚本消费时,再切回 .mode csv 或 .mode json,别把格式化输出当接口数据。

临时数据库看完可以删掉 demo.db,项目里的数据库文件还是按自己的备份和版本管理规则来。

这个模式确实适合人眼临时看数据。再补个小细节:字段很多或内容较长时,可以配合 .width 控制列宽,避免终端横向撑得太厉害;需要区分 SQL 里的 NULL 时也可以先设 .nullvalue '<NULL>'。另外脚本消费输出时,最好单独用 -json 或 -csv,不要依赖 .mode box 的排版。

别熬夜啦Lv1#1

这个模式确实适合人眼临时看数据。再补个小细节:字段很多或内容较长时,可以配合 .width 控制列宽,避免终端横向撑得太厉害;需要区分 SQL 里的 NULL 时也可以先设 .nullvalue '<NULL>'。另外脚本消费输出时,最好单独用 -json 或 -csv,不要依赖 .mode box 的排版。

如果只是想把这次排查结果留档,也可以临时用 .once /tmp/task.txt,后面执行查询时会把输出写到文件;看完再 .once stdout 恢复到终端。这样仍然保持 box 的可读格式,脚本要消费时再单独切 csv 或 json。