MySQL转储到CSV文本文件中,列名在顶部?

时间:2011-01-04 01:19:46

标签: sql mysql csv export header-row

  

可能重复:
  How to export / dump a MySql table into a text file including the field names (aka headers or column names)

我使用此SQL代码段将表转储为CSV文本文件:

SELECT * FROM品牌INTO OUTFILE“e:/brand.csv” 字段由'''封闭'''' 由“\ n”;

终止的线路

但是,此方法不会在CSV文件的开头添加列名。我的问题是如何选择所有列/字段名称,就像导出表格时选择“将字段名称放在第一行”中的phpMyAdmin所做的那样。

2 个答案:

答案 0 :(得分:20)

只要您运行MySQL 5或更高版本,我就想办法手动输入这些名称。在这里,它被编写为用于在unix命令行上运行的bash脚本:

DBNAME=<database_name>
TABLE=<table_name>

FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv

#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME

#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME

#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;"

#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME

#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv

虽然不是最优雅的解决方案,但我确信知道SQL和/或bash比我更好的人可以压缩成一行......

它的作用是:

  1. 使用MySQL的信息架构创建一个空的CSV w /列标题
  2. 在该空白CSV上附加额外的换行符,以便您的数据开始显示新行
  3. 使用非常标准的“SELECT * INTO OUTFILE ...”查询来创建一个包含数据的CSV
  4. 将数据文件附加到带有列标题的文件
  5. 删除(临时)数据文件
  6. 祝你好运,如果你清理它,发布你的结果!

答案 1 :(得分:7)

我认为这可以满足您的需求。我正在使用mysql 5.1.60,它在第一行输出字段名称。这将使用“\ t”作为字段分隔符,我不知道如何请求逗号。

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv