2008-11-04 3 views
15

En el intérprete de MySql, es muy fácil volcar una tabla en la pantalla junto con sus nombres de campo.Cómo exportar/volcar una tabla MySql en un archivo de texto incluyendo los nombres de campo (aka encabezados o nombres de columna)

Parece que no hay una forma simple de exportar una tabla a un archivo de salida delimitado por tabulaciones o CSV que incluye sus encabezados de columna.

Estoy tratando de hacer esto usando solo SQL o la línea de comandos de Linux, sin escribir un programa en otro idioma.

Gracias

Respuesta

19

Tubería de la consulta para el cliente de línea de comandos como salida una lista separada pestaña con los nombres de columna como la primera línea

$ 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 
+1

Probé esto y funcionó como se anuncia –

+3

Es un corte en lugar de MySQL proporcionada función. Supongo que puede no funcionar para otros sistemas operativos. – janetsmith

+1

No es un hack, per se. Por supuesto, puede no funcionar en sistemas que no proporcionan una interfaz de línea de comando en buen estado y el cliente de línea de comandos mysql. –

1

Usted puede hacer esto con el comando mysqldump. Eche un vistazo a las opciones --tab y --xml.

+0

Probé esto y no dio resultados satisfactorios. Es decir, "sudo mysqldump --user = root --pass = mypass -T/home/mydir mydb mytable" produce "mysqldump: error obtenido: 1: no se puede crear/escribir en el archivo '/home/mydir/mytable.txt' (Errcode: 13) al ejecutar 'SELECT INTO OUTFILE' " –

+0

No debería necesitar usar sudo para esto. Solo asegúrese de ejecutar mysqldump desde una cuenta que tenga permiso para escribir en la carpeta de salida, que parece ser el error. –

+1

Ok, conseguí que esto funcione al crear un directorio con 777 permisos. Sin embargo, no generó los nombres de las columnas, solo los datos. –

9

Este pequeño script debe hacerlo:

- 1. elegir la mesa y el archivo de salida aquí/esto debe ser la única entrada

select 'mytable' into @tableName; 
select 'c://temp/test.csv' into @outputFile; 

- 2. obtener los nombres de columna un formato que se ajuste a la consulta

select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns 
where [email protected]; 

- 3. construir la consulta

SET @query = CONCAT(
"select * from 
((SELECT ",@columnNames,") 
UNION 
(SELECT * FROM `",@tableName,"`)) as a 
INTO OUTFILE '", @outputFile, "'"); 

- 4. ejecutar la consulta

PREPARE stmt FROM @query; 
EXECUTE stmt; 
+1

¿Las columnas ordenadas por "SELECT * ..." estarán en el mismo orden que las columnas enumeradas de la consulta information_schema.columns? No curioseando aquí, solo curiosidad ... –

+0

@ cafe876: Gracias por esta solución. Solo me pregunto por qué es necesario el apóstrofo '. Si elimino los dos apóstrofes, la consulta no funciona. Si deseo agregar una restricción (por ej .: SELECCIONE 'x> 1' INTO @constr) en esta línea: (SELECCIONE * FROM '", @ tableName, "' WHERE ", @ cosntr,)) como" -> this No funciona. ¿Alguna idea? – giordano

+0

@giordano: si quiere obtener una respuesta, probablemente necesite definir mejor "no funciona"; p.ej. ¿Qué mensaje de error viste? También puede necesitar hacer una pregunta por separado. Sin embargo, el backtick le permite usar nombres de columna que contienen caracteres inusuales. – LarsH

3

I consigue que de esta manera:

echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv 

la opción -b de MySQL separa las columnas por pestañas, que se convierten en comas utilizando SED . Tenga en cuenta que los encabezados también se generan.

+0

Excelente, esto funcionó para mí. – thekingoftruth

+2

Por cierto, tuve que reemplazar '\\ t' en OSX con' Ctrl-V' 't'. – thekingoftruth

+0

@thekingoftruth ¡Gracias por eso! De lo contrario, todas las letras t en el resultado se reemplazan por comas. – crlane

-1

He creado un procedimiento para automatizar la exportación de los contenidos de una gran cantidad de tablas al archivo .csv usando SELECT ... INTO OUTFILE. Consulte lo siguiente si necesita algo como esto

http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/.

Utiliza el método descrito por cafe876, pero funcionará para una o toda una serie de tablas, además puede establecer el delimitador y el carácter de comillas que se utilizarán.

+0

No fue posible encontrar el archivo después ... jaja. – thekingoftruth

0

Utilicé el comando anterior y lo modifiqué de acuerdo con mis requisitos.
que necesitaba para conseguir columna de contraseñas de la base de datos de WordPress MySQL en un archivo de texto, para ello he utilizado el siguiente a continuación de comandos

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt 
Cuestiones relacionadas