-1

我正在尝试将结果集导出到 csv 文件并将其加载到 mysql。

mysql -e "select *  from temp" > '/usr/apps/{path}/some.csv'

输出文件不可导入。它有查询、标题和一堆不需要的行。我想要的只是文件中以逗号分隔的 VALUES,以便我可以将其导入回来。

到目前为止我尝试了什么?

  1. 已添加 | sed 's/\t/,/g' - 没有帮助
  2. 尝试了 OUTFILE 但它没有用。
  3. 尝试了 SHOW VARIABLES LIKE "secure_file_priv",它给出了 null。

OUTFILE 对我不起作用,因为我收到错误“MySQL 服务器正在使用 --secure-file-priv 选项运行,因此它无法执行此语句”。我无法编辑变量secure-file-priv。它现在有一个空值。

我得到如下图的文件输出。我使用了别名 mysql2csv='sed '\''s/\t/","/g;s/^/"/;s​​/$/"/;s​​/\n//g'\'''

在此处输入图像描述

4

2 回答 2

1

此页面向您展示如何使用命令行导出到 CSV:

https://coderwall.com/p/medjwq/mysql-output-as-csv-on-command-line

从该页面:

# add alias to .bashrc
alias mysql2csv='sed '\''s/\t/","/g;s/^/"/;s/$/"/;s/\n//g'\'''

$ mysql <usual args here> -e "SELECT * FROM foo" | mysql2csv > foo.csv
于 2019-06-14T21:07:37.410 回答
0

既然你在尝试,为什么不试试 MySQL 参考手册中给出的例子呢?

https://dev.mysql.com/doc/refman/8.0/en/select-into.html

摘抄:

这是一个生成许多程序使用的逗号分隔值 (CSV) 格式的文件的示例:

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

在 shell 脚本中,如果我们要在脚本中使用文字 SQL,我们可能需要注意单引号和反斜杠字符。例如,\n(反斜杠 n 个字符)需要作为 SQL 文本的一部分发送到 MySQL 服务器。我们必须小心,反斜杠字符不会被 shell 脚本吞噬。

于 2019-06-14T21:05:07.697 回答