导读:本期聚焦于天马创作的《SQLite的.mode命令怎么用?一文搞懂csv、column等输出格式设置》,敬请观看详情。SQLite自带的命令行工具sqlite3默认用竖线分隔查询结果,看起来杂乱难读,这时候就轮到.mode命令登场了。它是sqlite3内置的点命令,专门用来控制查询结果的展示格式,支持csv、column、list、json、html、insert、quote等十多种模式,配合.headers开关还能显示列名。本文详细讲解每种常用模式的输出效果和适用场景,比如csv模式方便导出数据到表格软件,column模式让终端输出整齐对齐,json模式便于程序处理。文中还会介绍如何把结果直接导出到文件、如何在交互式与脚本场景下选择合适的格式,以及修改.separator分隔符、保存配置到.sqliterc等实用技巧,帮你把sqlite3命令行玩得更顺手。

.mode是sqlite3命令行工具中最重要的点命令之一,它决定了SELECT查询结果以什么样式呈现在终端或者输出文件里。默认情况下,sqlite3使用list模式,所有字段用竖线|分隔,一眼看去很难分清列的边界。掌握了.mode之后,你可以把输出切换成整齐的表格、标准的CSV,甚至是JSON和HTML格式,应对导数据、写脚本、做演示等各种场景。这篇文章会把常用模式逐个讲清楚,并给出实际操作示例。

SQLite的.mode命令怎么用?一文搞懂csv、column等输出格式设置

.mode命令的基本用法和常用模式一览

.mode属于sqlite3的点命令(dot-command),只在命令行工具里有效,不属于SQL语法的一部分,因此不能在代码中通过SQL语句调用。它的基本形式有两种:一种是.mode 模式名,直接切换全局输出格式;另一种是.mode 模式名 参数,比如csv模式可以附带自定义分隔符。执行时不以分号结尾,这一点和SQL语句不同,新手常常在这里踩坑。

查看当前支持的所有模式,可以在sqlite3交互环境中输入.help mode,会列出全部可用选项。常用模式包括:ascii、box、csv、column、html、insert、json、line、list、markdown、quote、table、tcl。其中最常用的是csv、column、list、json和line这几种,下面这段命令演示了最基本的切换流程:

-- 启动sqlite3并打开数据库
sqlite3 test.db

-- 查看当前模式
.mode

-- 切换为column模式
.mode column

-- 打开列名显示(配合column效果更好)
.headers on

-- 再次查询
SELECT id, name, price FROM products LIMIT 5;

需要注意的是,.headers on虽然不是.mode的一部分,但和输出格式关系密切。column、box、table这些模式默认会显示列名,而csv模式需要配合.headers on才会把列名作为第一行输出。两者搭配使用才能得到完整可用的导出结果。

csv模式:导出数据的标准选择

csv模式会把每个字段用逗号分隔,字符串字段自动加上双引号包裹,如果内容本身含有逗号或双引号,会按照CSV规范进行转义,处理成""的形式。这是把SQLite数据导出到Excel、WPS或者导入其他数据库时最常用的格式。来看一个完整例子:

sqlite3 test.db
.mode csv
.headers on
.output products.csv
SELECT id, name, price FROM products;
.output stdout

上面这段命令做了四件事:先切换到csv模式,再打开表头,然后用.output把后续输出重定向到products.csv文件,执行查询后用.output stdout切回终端。生成的文件可以直接用表格软件打开。

如果默认的逗号不满足需求,比如数据中大量包含逗号,可以改用其他分隔符。一种办法是.mode csv加自定义分隔符(较新版本支持),另一种更通用的做法是使用list模式配合.separator命令:

.mode list
.separator "|"
SELECT id, name, price FROM products;

这样输出的每个字段之间会用竖线分隔。此外还有quote模式,它会把所有值都加上SQL单引号并用逗号分隔,适合生成可以直接粘贴进INSERT语句的数据片段。在Windows命令行下做CSV导出时,建议先执行.encoding UTF-8避免中文乱码,同时注意CSV文件加BOM头的问题,如果Excel打开中文乱码,可以在导出后手动处理,或者用.once配合管道解决。

column模式与表格类模式:让终端输出整齐易读

column模式会计算每列的最大宽度并自动对齐,配合.headers on后效果类似一个小型表格,非常适合在终端做交互查询和演示。它的缺点是遇到超长字段会截断显示,可以通过.width命令手动指定每列宽度,例如.width 5 20 10分别设置前三列的宽度为5、20、10个字符。

.mode column
.headers on
.width 4 24 10
SELECT id, name, price FROM products LIMIT 5;

除了column,新版sqlite3还提供了box、table、markdown三种增强表格模式,它们自带边框或Markdown管道符语法,输出的表格自带完整边框线,不需要手动调宽度也非常美观。其中markdown模式生成的结果可以直接粘贴到README文档里使用,非常方便:

.mode markdown
SELECT id, name, price FROM products LIMIT 3;

执行后输出大致类似:

| id |        name        | price |
|---:|--------------------|------:|
| 1  | 机械键盘           | 299.0 |
| 2  | 无线鼠标           | 89.5  |

line模式则是另一种风格的易读格式,它把每一行记录竖着展示,每个字段名和值各占一行,记录之间用空行分隔。当表的字段很多、横向展示放不下时,line模式的可读性远高于column模式,排查单条数据的字段值特别顺手。

json、insert、html等编程向模式的实战用法

json模式会把查询结果输出为标准的JSON数组,字段名作为键,值按类型自动转换,数字不加引号,字符串加双引号,NULL输出为null。这个模式在写脚本时特别有用,比如配合shell脚本把SQLite数据转换成JSON后传给其他程序处理:

.mode json
SELECT id, name, price FROM products WHERE price > 100;

输出形如:

[{"id":1,"name":"机械键盘","price":299.0},
 {"id":3,"name":"4K显示器","price":1899.0}]

insert模式会把每行结果生成一条完整的INSERT语句,表名可以在参数中指定,例如.mode insert mytable会把结果包装成INSERT INTO mytable VALUES(...);的形式。这是在不同数据库之间搬移数据、或者生成测试数据脚本的好办法,导出的SQL文件可以直接在另一个SQLite库中执行。html模式则输出表格形式的HTML片段,包含tr、td等标签,适合快速生成网页展示用的数据表格,不过一般不建议在生产环境直接使用,更多是临时调试用途。

批量执行与非交互场景的格式控制技巧

在写自动化脚本时,往往不进入交互环境,而是直接在命令行用-cmd参数或者管道方式执行点命令。比如一次性导出CSV可以这样写:

sqlite3 test.db ".mode csv" ".headers on" "SELECT * FROM products;" > products.csv

这种写法把多个参数依次传给sqlite3,前面两条是点命令,最后一条是SQL语句,输出通过重定向写入文件。也可以用-cmd把格式设置放在前面:

sqlite3 -cmd ".mode box" -cmd ".headers on" test.db "SELECT * FROM users LIMIT 10;"

如果希望每次启动sqlite3都自动使用喜欢的格式,可以在用户主目录下创建.sqliterc文件(Windows下是C:\Users\用户名\.sqliterc),写入常用配置,sqlite3启动时会自动执行里面的点命令:

.mode column
.headers on
.nullvalue NULL

其中.nullvalue用于指定空值的显示文字,配合column模式可以清楚地区分空字符串和NULL。另外提一下tcl模式,它输出Tcl风格的引号包裹列表,普通开发中很少用到,了解即可。选择格式的原则很简单:给人看的选column、box或table,给程序处理的选csv、json或list,做数据迁移选insert,掌握这条主线,.mode的十几种模式就都能灵活驾驭了。

SQLite.mode命令csv输出格式修改时间:2026-09-05 15:44:58

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50995.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。