Skip to content

MySQL查询导出到csv

问题

这其实是个常用技能,大部分GUI工具都提供了一些相关的操作,但是由于我用的都是基于WEB的管理工具,对结果条目超长,查询时间超长就很难适应。所以常常需要去终端导。

终端里面众所周知的导出工具是mysqldump,不过这个工具适合整表导出和备份之用,如果需要指定查询和输出格式,就比较麻烦了。谷歌一轮无解。

解决

不过好在皇天不负有心人,终于还是在stackovervlow找到一种方式,点击查看>>>

这个方法的思路是调用mysql命令,直接返回查询结果。再用sed调整格式为csv。这是个好思路,不过我不懂sed,看到那串天书般的指令不禁懵逼。但是我懂点awk啊,一样的啦。

我的命令是:

mysql -B -h'localhost' -u'root' -p  -D database -e "select * from b_brand;"|awk '{gsub(/\t/,",");print $0;}'>brand.csv

以竖线“|”为分隔,前半截是mysql查询,大家应该找到了查询语句就是-e后面的,-D指定database,各种其他参数看不懂的就各自查文档吧。执行这个命令会直接把查询结果输出到终端。由于这个结果是用tab分隔字段,所以后面要做的就是把tab格式化了。

竖线“|”后面至“>”的awk就是做这事的,gsub是查找\t字符换成英文逗号作为csv的分隔符,相信熟悉awk的同学还会在这个步骤发挥出其他作用。毕竟awk就是专门处理这种表格数据的。到此为止呢我们就得到了我们最终需要的csv格式的表格结果了。

但是这样还是输出在终端的。所以我们用“>”操作符将输出导入到一个文件,所以“>”后面就是你需要的结果文件名。如果一次执行中断了,我们还可以用“>>”的追加形式再次执行。这些都是Linux的基本操作啦。

后记

不过执行这个命令的时候需要注意的是,很多SQL语句会使用` 符号来引用表名和字段名等等。但是在终端命令时 ` 符号是有特殊含义的。所以要注意这个字符的使用,我的方式是全部去掉。

Published in程序猿的东西

Be First to Comment

发表评论