如何用单条命令批量显示指定SQLite表内容并计时
实现批量查询指定表并计时的单条命令
这问题我熟,刚好可以用sqlite3命令行工具结合Shell的命令替换和time命令来实现,一条命令就能搞定批量查询+计时的需求,具体方案如下:
基础版本命令
time sqlite3 your_database.db "$(sqlite3 your_database.db "SELECT 'SELECT * FROM ' || name || ';' FROM sqlite_master WHERE type = 'table' AND name LIKE '%#_1' ESCAPE '#'")"
命令拆解
- 外层
time:负责统计整个命令的执行耗时,执行完后会输出用户时间、系统时间和总耗时信息。 - 内层
sqlite3查询:通过你提供的表名筛选逻辑,动态生成每个目标表的全量查询语句(格式为SELECT * FROM 表名;)。 - 外层
sqlite3执行:把内层生成的所有SQL语句作为参数传入,批量执行并输出所有表的内容。
优化版本(带表名标识)
如果希望输出结果更清晰,能区分不同表的内容,可以在每个表的查询结果前加上表名标识,命令调整为:
time sqlite3 your_database.db "$(sqlite3 your_database.db "SELECT 'SELECT ''=== 表名: ' || name || ' ==='' AS ''''; SELECT * FROM ' || name || ';' FROM sqlite_master WHERE type = 'table' AND name LIKE '%#_1' ESCAPE '#'")"
这个版本会在每个表的内容前输出类似=== 表名: xxx_1 ===的分隔行,方便你快速定位不同表的数据。
注意事项
- 记得把命令中的
your_database.db替换成你实际的数据库文件路径和名称。 - 如果你的表名包含空格、特殊字符(比如
-、@),建议给表名加上双引号避免解析错误,调整内层的SQL语句为:SELECT 'SELECT * FROM "' || name || '";' FROM sqlite_master WHERE type = 'table' AND name LIKE '%#_1' ESCAPE '#'
内容的提问来源于stack exchange,提问作者Yoann Pageaud
相关产品推荐
相关产品推荐

