我经常在命令行mysql中工作。常见的需求是获取查询的结果并将其导入Numbers文档(类似于Excel文档)。
这样做的最快方法是什么?
您可以直接从MySQL中选择一个outfile,但这需要几个步骤。
FIELDS OPTIONALY ENCLOSED BY
和DELIMITED BY
。 我倾向于采用这种方法。对我来说似乎有点快,但这主要是因为我不记得如何从上面构建SELECT INTO OUTFILE
查询并且必须查找它。
答案 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