首页 文章

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

提问于
浏览
14

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

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

方法1:选择输出文件

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

  • 使用所有必要参数导出查询,使其成为CSV格式,如 FIELDS OPTIONALY ENCLOSED BYDELIMITED BY .

  • sftp进入服务器并获取文件

  • 从服务器中删除该文件

方法2:复制/粘贴

我倾向于采用这种方法 . 对我来说似乎有点快,但是's mostly because I don'记住如何从上面构建 SELECT INTO OUTFILE 查询并且必须查找它 .

  • 复制/粘贴到本地文本文件

  • 在文本编辑器中打开并替换|用,

  • 另存为CSV并在Numbers中打开 .

6 回答

  • 0

    这个怎么样?:

    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选项的说明 .

  • 2

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

  • 0

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

    SQL file (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系统 .

  • 9

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

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

    ssh -L 3306:localhost:3306 user@remoteserver
    

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

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

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

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

  • 2

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

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

  • 7

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

相关问题