SQLite3如何自动导出多个匹配wpts_*模式的表?
批量处理SQLite中匹配
wpts_*模式的表数据导出 问题说明
你之前尝试的两种写法都无法实现需求:
SELECT time, lat, lng, acc FROM 'wpts_%':SQLite不支持直接用通配符匹配表名SELECT * FROM (SELECT name FROM sqlite_schema WHERE type ='table' AND name LIKE 'wpts_%'):这个查询仅返回表名列表,没有实际读取表内数据
下面提供两种无需人工干预的解决方案:
方案1:合并所有表数据并添加来源表标识(带分隔效果)
通过动态生成UNION ALL语句,给每条数据加上来源表名,区分不同表的内容:
- 执行以下SQL生成合并查询语句:
SELECT GROUP_CONCAT( 'SELECT time, lat, lng, acc, ''' || name || ''' AS source_table FROM ' || name, ' UNION ALL ' ) AS combined_query FROM sqlite_schema WHERE type = 'table' AND name LIKE 'wpts_%';
- 复制查询结果里的
combined_query内容,作为新的SQL执行,就能得到包含所有表数据且带来源表名的结果集,直接导出即可。
方案2:自动生成每个表单独导出到文件的脚本
如果需要每个表单独导出到独立文件,可通过SQL生成导出命令脚本:
- 执行以下SQL生成导出命令:
SELECT GROUP_CONCAT( '.mode csv' || CHAR(10) || '.output ' || name || '.csv' || CHAR(10) || 'SELECT time, lat, lng, acc FROM ' || name || ';' || CHAR(10) || '.output stdout', CHAR(10) || CHAR(10) ) AS export_script FROM sqlite_schema WHERE type = 'table' AND name LIKE 'wpts_%';
- 将查询结果中的
export_script内容保存为export_tables.sql文件 - 在终端执行以下命令,自动完成所有表的单独导出:
sqlite3 your_database.db < export_tables.sql
执行后每个wpts_*表会对应生成一个同名CSV文件。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

