Come esportare / scaricare una tabella MySql in un file di testo inclusi i nomi dei campi (ovvero intestazioni o nomi di colonne)

StackOverflow https://stackoverflow.com/questions/262924

  •  06-07-2019
  •  | 
  •  

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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top