2011-01-04 17 views
12

Duplicar posible:
How to export/dump a MySql table into a text file including the field names (aka headers or column names)MySQL volcado en archivos de texto CSV con nombres de columna en la parte superior?

utilizo este fragmento de SQL para volcar una tabla en archivos de texto CSV:

SELECT * FROM marca INTO OUTFILE "e:/marca. csv " CAMPOS TERMINADOS POR ',' ENCERRADO POR '"' LÍNEAS TERMINADAS POR "\ n";

Sin embargo, este enfoque no agrega los nombres de columna al comienzo del archivo CSV. Mi pregunta es cómo seleccionar todos los nombres de columna/campo, al igual que lo que hace phpMyAdmin cuando exporta la tabla y selecciona "Poner nombres de campos en la primera fila".

+0

mira esto (que es una solución): [archivo CSV exportación de MySQL con encabezamientos en primera fila] (http://homepage.mac.com/kelleherk/iblog/C711669388/E20060511141025/index.html) –

Respuesta

16

Descubrí una forma de tener que ingresar esos nombres manualmente siempre que ejecute MySQL 5 o superior. Aquí está, escrito como una escritura del golpe para que se ejecuta en una línea de comandos UNIX:

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 

Aunque no es la solución más elegante, estoy seguro de que se puede comprimir en una sola línea por alguien que conoce SQL y/o golpear un poco mejor que yo ...

lo que hace es:

  1. utiliza esquema de información de MySQL para crear un vacío CSV encabezados de columna w/
  2. añade un nuevo salto de línea extra para que desembocan por lo CSV sus datos comenzarán a aparecer una nueva línea
  3. utiliza un estándar bastante "SELECT * INTO OUTFILE ..." consulta para crear un archivo CSV completo de datos
  4. anexa el archivo de datos en el archivo w/encabezados de columna
  5. borra los datos (temporal) archivo

¡Buena suerte, y si la limpia, publique sus resultados!

8

Creo que esto hace lo que quiere. Estoy usando mysql 5.1.60, esto arroja nombres de campo en la primera línea. Esto usará "\ t" como el separador de campo, no estoy seguro de cómo pedir una coma.

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

Eso no cita los campos que contienen el carácter de coma, por lo que, dependiendo de la naturaleza de sus datos, por supuesto, generará potencialmente un archivo CSV no válido. –

+0

@BobbyJack Si el separador es una pestaña, entonces ya no hay necesidad de preocuparse por las comas ... – rloth

Cuestiones relacionadas