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

问题描述 投票:14回答:6

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

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

Method 1: Select into outfile

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

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

Method 2: Copy/paste

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

  1. 复制/粘贴到本地文本文件
  2. 在文本编辑器中打开并替换|用,
  3. 保存为CSV并在Numbers中打开。
mysql csv export numbers
6个回答
10
投票

这个怎么样?:

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

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

顺便说一句,为方便起见并启用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

--batch,-B

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

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


7
投票

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


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系统。


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,而是通过加密隧道传输所有数据。


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.