SQLite 的命令行工具内置一批以点号开头的元命令,.output 专门用来切换查询结果的输出目标。默认情况下,SELECT 语句的结果会打印到终端屏幕,一旦执行 .output result.txt,后续查询结果就会写入该文件。这个机制看似简单,但配合输出格式设置后可以成为轻量级的导出工具。

一、.output 命令的基础用法
在 SQLite 交互式终端中,.output 命令的语法格式为 .output 文件名,如果省略文件名则恢复标准输出。例如启动 sqlite3 并打开一个数据库后,输入 .output data.txt,再执行任意 SELECT 查询,终端将不再显示结果,所有记录都会写入 data.txt 文件。
下面是一个完整的过程:
sqlite> .open test.db sqlite> .output result.txt sqlite> SELECT id, name FROM users; sqlite> .output stdout sqlite> SELECT COUNT(*) FROM users;
上面的示例中,第一条 SELECT 的结果被写入当前目录下的 result.txt 文件,而第二条 SELECT 因为已经将输出切回 stdout,所以结果重新显示在终端。使用 .output stdout 是最明确的恢复方式,当然直接输入 .output 不带参数也能达到同样效果。需要注意的是,.output 只改变查询结果的输出目标,命令提示符、错误信息和点命令本身的反馈仍然会显示在屏幕上。
文件路径方面,可以使用相对路径或绝对路径。在 Windows 系统中,路径通常写成 C:\data\output.txt,反斜杠不需要转义;在类 Unix 环境下则使用 /home/user/output.txt。如果指定的文件已经存在,内容会被覆盖,如果目录不存在,SQLite 会报错,因此在重定向之前应确认目标目录可写。
二、配合输出格式生成可用的数据文件
单纯重定向虽然能把查询结果写进文件,但默认的输出模式 list 并不适合数据分析。SQLite 提供 .mode 指令来设置输出格式,常用值包括 csv、html、json、insert、tabs 等。结合 .headers 开关,可以将文件内容整理成带有表头、分隔符规范的结构化数据。
以导出 CSV 文件为例,正确的执行顺序是:先开启表头,再设置模式,然后重定向,最后执行查询。顺序颠倒可能导致表头缺失或格式混乱。
sqlite> .headers on sqlite> .mode csv sqlite> .output users.csv sqlite> SELECT id, name, email FROM users; sqlite> .output stdout
执行完成后,users.csv 文件中的内容会包含列名作为第一行,每条记录用逗号分隔,字符串字段必要时会用双引号包裹,便于 Excel、Google Sheets 等工具直接打开。如果希望逗号改为其他分隔符,可以在 list 模式下使用 .separator 自定义字符,但 csv 模式本身遵循标准 CSV 转义规则,更推荐直接用 csv。
HTML 模式适合生成可嵌入网页的表格片段。运行 .mode html 后,查询结果会输出为 HTML 表格结构,其中标签名如 <table>、<tr>、<td> 都会自动生成。JSON 模式则输出对象数组,方便程序解析。这些模式与 .output 配合后,可以快速完成数据格式转换。
三、.once 临时重定向与常见问题
在实际操作中,如果只需要将某一次查询结果写入文件,而不希望影响后续输出,使用 .once 命令比 .output 更加安全。.once 的语法为 .once 文件名,它只对紧随其后的下一条 SQL 语句生效,执行完会自动恢复标准输出。
sqlite> .headers on sqlite> .mode html sqlite> .once report.html sqlite> SELECT * FROM sales WHERE sale_date = '2024-01-01'; sqlite> SELECT COUNT(*) FROM sales;
上面的示例中,第一条 SELECT 的结果写入 report.html,第二条 SELECT 仍然显示在终端。相比 .output,.once 避免了忘记恢复输出导致后续结果被追加到文件中的问题,非常适合一次性导出场景。如果确实需要连续多次导出到同一个文件,可以多次使用 .once,或者使用 .output 并在完成后及时切回 stdout。
常见问题还包括:执行 .output 后忘记执行查询,导致生成的文件为空;文件被其他程序占用,SQLite 会报 unable to open database file 或 permission denied 错误;在只读目录中指定输出文件同样会失败。排查时应先检查文件路径和目录权限。另外,输出重定向不会自动创建目录,需要确保父目录已存在。
对于数据量较大的查询,重定向到文件可以减少终端渲染压力,同时配合 .timer 可以观察查询耗时。导出结束后用文本编辑器或命令行工具查看文件开头几行,能够快速验证格式是否符合预期。
SQLite输出重定向.output命令查询结果文件保存修改时间:2026-10-02 16:57:51