Come esportare / scaricare una tabella MySql in un file di testo inclusi i nomi dei campi (ovvero intestazioni o nomi di colonne)
Domanda
Nell'interprete di MySql, è molto facile scaricare una tabella sullo schermo insieme ai nomi dei suoi campi.
Non sembra esserci un modo semplice per esportare una tabella in un file delimitato da tabulazioni o CSV includendo le intestazioni di colonna.
Sto provando a farlo usando solo SQL o la riga di comando di Linux, senza scrivere un programma in un'altra lingua.
Grazie
Soluzione
Il piping della query al client della riga di comando genera un elenco separato da tabulazioni con i nomi delle colonne come prima riga
$ echo "select * from surveys limit 5" | mysql -uroot -pGandalf surveys
phone param1 param2 param3 param4 p0 p1 p2 p3 audio4 code time
XXXXXXXXX 2008-07-02 11:17:23 XXXXXXXX SAT - - - - - ERROR 2008-07-02 12:18:32
XXXXXXXXX 2008-07-02 11:22:52 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:04:29
XXXXXXXXX 2008-07-02 11:41:29 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:07:22
XXXXXXXXX 2008-07-02 12:16:19 XXXXXXXX SAT 1 1 1 9 XXXXXXXXX_4.wav OK 2008-07-02 16:14:27
XXXXXXXXX 2008-07-02 08:21:25 XXXXXXXX SAT 1 1 1 1 XXXXXXXXX_4.wav OK 2008-07-02 12:29:40
Altri suggerimenti
Questo piccolo script dovrebbe farlo:
- 1. scegli la tabella e il file di output qui / questo dovrebbe essere l'unico input
select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;
- 2. ottenere i nomi delle colonne in un formato adatto alla query
select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;
- 3. crea la query
SET @query = CONCAT(
"select * from
((SELECT ",@columnNames,")
UNION
(SELECT * FROM `",@tableName,"`)) as a
INTO OUTFILE '", @outputFile, "'");
- 4. eseguire la query
PREPARE stmt FROM @query;
EXECUTE stmt;
L'ho raggiunto in questo modo:
echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv
L'opzione -B di mysql separa le colonne da tab, che vengono convertite in virgole usando sed. Nota che anche le intestazioni vengono generate.
È possibile farlo con il mysqldump . Dai un'occhiata alle opzioni --tab e --xml.
Ho creato una procedura per automatizzare l'esportazione dei contenuti di un numero maggiore di tabelle nel file .csv usando SELECT ... INTO OUTFILE
. Fai riferimento a quanto segue se hai bisogno di qualcosa del genere
http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/ .
Utilizza il metodo descritto da cafe876, ma funzionerà per una o un'intera serie di tabelle, inoltre puoi impostare il delimitatore e il carattere di citazione da utilizzare.
Ho usato il comando sopra e modificato in base alle mie esigenze.
Avevo bisogno di ottenere la colonna delle password dal database mysql di wordpress in un file di testo, per fare ciò ho usato il seguente comando di seguito
echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt