【问题标题】:Export a table as csv in mysql from shell script [duplicate]从shell脚本将表导出为mysql中的csv [重复]
【发布时间】:2019-10-29 11:56:03
【问题描述】:

我正在尝试将结果集导出到 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'\'''

【问题讨论】:

标签: mysql linux export-csv


【解决方案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

【讨论】:

  • 如果 foo 中的某些列的值可能包含制表符 (\t) 和/或双引号 (") 字符,请考虑这可能无法按预期工作。
  • 这个结果仍然是 |分隔,所有内容都作为 csv 上的一列
  • 你在控制输出格式的 sql 语句中使用了@spencer7593 建议的参数吗?
  • @SloanThrasher 我不认为我可以把它们放在我的 sql 中,除非我做一个输出文件。是不是不对。非常感谢您的帮助。
  • 是的,它会输出到一个文件中(就像你问题中的例子一样)。通过在查询中包含格式选项,它将正确格式化 CSV。如果您使用选项 INTO OUTFILE,则不需要将结果通过管道传输到文件。由于它是 shell 命令,因此您需要正确转义引号和任何反斜杠字符。
【解决方案2】:

既然你在尝试,为什么不试试 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 脚本吞噬。

【讨论】:

  • OUTFILE 不适合我。非常感谢您的回答。
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多