将mysql查询结果转换为CSV(带复制/粘贴)

时间:2010-01-14 19:24:18

标签: mysql csv export numbers

我经常在命令行mysql中工作。常见的需求是获取查询的结果并将其导入Numbers文档(类似于Excel文档)。

这样做的最快方法是什么?

方法1:选择输出文件

您可以直接从MySQL中选择一个outfile,但这需要几个步骤。

  1. 使用所有必要参数导出您的查询,使其成为CSV格式,例如FIELDS OPTIONALY ENCLOSED BYDELIMITED BY
  2. sftp进入服务器并获取文件
  3. 从服务器删除文件
  4. 方法2:复制/粘贴

    我倾向于采用这种方法。对我来说似乎有点快,但这主要是因为我不记得如何从上面构建SELECT INTO OUTFILE查询并且必须查找它。

    1. 复制/粘贴到本地文本文件
    2. 在文本编辑器中打开并替换|用,
    3. 另存为CSV并在Numbers中打开。

7 个答案:

答案 0 :(得分:10)

这个怎么样?:

mysql -B -e“$ MY_QUERY”> my_data.csv

输出格式实际上是制表符分隔的,而不是逗号分隔的 但至少Excel和OpenOffice Calc会自动适应这一点。

BTW,为了方便和启用非交互式执行 mysql命令,我强烈建议设置一个安全的〜/ .my.cnf文件
(只能由您阅读),条目如下:

[client]
user=YOUR_MYSQL_USER_NAME
password=YOUR_MYSQL_PASSWORD
host=YOUR_MYSQL_SERVER
port=YOUR_MYSQL_SERVER_PORT
WHATEVER_OTHER_OPTIONS_YOU_LIKE

参考文献:

http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html

- 批处理,-B

使用制表符作为列分隔符打印结果,每行都在新行上。使用此选项,mysql不使用历史文件。

批处理模式会导致非常规输出格式和特殊字符的转义。可以使用原始模式禁用转义;请参阅--raw选项的说明。

答案 1 :(得分:7)

您还可以将mysql命令行实用程序与-e选项一起使用,并将输出通过管道传输到文件中。这将以制表符分隔的格式输出数据。

答案 2 :(得分:2)

您可以在本地计算机上执行SELECT ... INTO OUTFILE查询,并将其保存在本地。如果您已在本地安装mysql *命令行实用程序,只需添加-h <ip-address>标志即可连接到特定主机。 mysql也可以从标准输入读取,因此您可以设置一个用于导入的.sql文件。

SQL文件(outfile.sql):

SELECT * FROM myTable WHERE date>CURDATE()
INTO OUTFILE '/home/me/outfile.csv' -- Specify output file (if Windows, make sure
                                    -- to use backslashes and escape them 
                                    -- (C:\\Users\\<user>\\...)
FIELDS
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '"' -- Results in double quotation marks, which I have found Excel
                   -- requires (instead of using a backslash to escape)
    TERMINATED BY '\\n' -- or your line ending of choice
                        -- (i believe escaping is required)

然后你会发出以下命令:

mysql -u <user> -p -h <server_ip_address> <outfile.sql

请注意,创建一个可以从远程IP地址进行连接的新用户可能是个好主意,具有FILE权限,只有SELECT访问您需要查询的表。

最初有一些设置,但最后,您可以将mysql命令粘贴在批处理文件中,并使其成为双击过程。

*我相信您必须下载mysql CLI附带的完整MySQL系统。

答案 3 :(得分:2)

使用您的第一种方法进行以下修改:

您可以在本地计算机上运行该命令而不是在服务器上运行该命令,而是直接保存文件,而无需sftp并将其删除。为此,您必须将mysql端口转发到本地计算机上的空闲端口。

ssh -L 3306:localhost:3306 user@remoteserver

第一个“3306”是本地计算机上的端口。 “localhost”指的是remoteservers主机名。第二个“3306”是远程机器上的端口,应该转发。如果MySQL服务器在不同的端口上运行,则必须使用该端口。登录后,只要您想要工作,就可以保持ssh会话处于打开状态。

在新的终端窗口中,您可以启动mysql会话。

mysql -hlocalhost -uUser -p --port=3306

此方法的优点是,您不必将MySQL服务器暴露给Internet,而是通过加密隧道传输所有数据。

答案 4 :(得分:0)

我认为你的选项1是最好的 - 做一次并打印正确的选项甚至更好,创建一个小脚本,接受查询并自动添加你最喜欢的封闭和放大分隔符选项。

如果你自己安装了客户端平台的mysql客户端实用程序,并且如果可能的话,从工作站直接连接到mysql服务器,你也可以跳过步骤2和3。

答案 5 :(得分:0)

Excel在Text to Columns菜单下有Data功能,可让您指定自定义分隔符。我猜数字会有类似的功能。如果是,则解决方案是直接复制并粘贴到Numbers文档中,然后将这些文本单元格转换为指定|作为分隔符的列。

答案 6 :(得分:0)

如果你在一个文件中有 mysql 输出,这个文件很大并且需要几分钟才能再次运行查询,请在 bash 中运行以下命令:

egrep -v "^\+" output.txt|sed 's/^|\s*//g'|sed 's/\s*|$//g'|sed 's/\s*|\s*/,/g' > output.csv