将有逗号数据的SQL表导出为CSV文件。

19 浏览
0 Comments

将有逗号数据的SQL表导出为CSV文件。

有没有一种简单的方式可以从Linux命令行运行MySQL查询并以CSV格式输出结果?

现在我正在做的是:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ

当有很多需要用引号包围的列,或者结果中有需要转义的引号时,就会变得混乱。

admin 更改状态以发布 2023年5月25日
0
0 Comments

mysql your_database --password=foo < my_requests.sql > out.tsv

这会生成一个制表符分隔的格式。如果你确定逗号不会出现在任何列数据中(制表符也不会出现),你可以使用这个管道命令来获取真正的CSV格式(感谢用户John Carter):

... .sql | sed 's/\t/,/g' > out.csv

0
0 Comments

来自将MySQL查询结果保存到文本或CSV文件中

SELECT order_id,product_name,qty
FROM orders
WHERE foo = 'bar'
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

注意:在MySQL的最新版本中,该语法可能需要重新排序为

SELECT order_id,product_name,qty
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM orders
WHERE foo = 'bar';

使用此命令,列名将不会被导出。

还要注意,/var/lib/mysql-files/orders.csv将位于运行MySQL的服务器上。MySQL进程正在运行的用户必须具有写入所选择目录的权限,否则命令将失败。

如果您想从远程服务器(特别是托管或虚拟化机器,如HerokuAmazon RDS)将输出写入本地机器,则此解决方案不适用。

0