首页 文章

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

提问于
浏览
13

可能重复:如何将MySql表导出/转储到包含字段名称(也称为 Headers 或列名称)的文本文件中

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

SELECT * FROM品牌INTO OUTFILE“e:/brand.csv”字段终止于',''被'封闭'''终止于“\ n”;

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

2 回答

  • 8

    我认为这样做你想要的 . 我正在使用mysql 5.1.60,它在第一行输出字段名称 . 这将使用“\ t”作为字段分隔符,我不知道如何请求逗号 .

    echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv
    
  • 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比我好一点的人压缩成一行...

    它的作用是:

    • 使用MySQL的信息模式创建一个空的CSV w /列 Headers

    • 为该空CSV添加额外的换行符,以便您的数据开始显示新行

    • 使用非常标准的"SELECT * INTO OUTFILE..."查询来创建一个包含数据的CSV

    • 将数据文件附加到带有列 Headers 的文件上

    • 删除(临时)数据文件

    祝你好运,如果你清理它,发布你的结果!

相关问题