Cómo exportar / volcar una tabla MySql en un archivo de texto que incluye los nombres de campo (también conocidos como encabezados o nombres de columna)

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

  •  06-07-2019
  •  | 
  •  

Pregunta

En el intérprete de MySql, es muy fácil volcar una tabla en la pantalla junto con sus nombres de campo.

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

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

Gracias

¿Fue útil?

Solución

La canalización de la consulta al cliente de línea de comandos genera una lista separada por tabulaciones con los nombres de las columnas 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

Otros consejos

Este pequeño script debería hacerlo:

- 1. elija la tabla y el archivo de salida aquí / esta debería ser la única entrada

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

- 2. obtenga los nombres de las columnas en un formato que se ajuste a la consulta

select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;

- 3. construir la consulta

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

- 4. ejecuta la consulta

PREPARE stmt FROM @query;
EXECUTE stmt;

Lo logré 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 mediante pestañas, que se convierten en comas mediante sed. Tenga en cuenta que los encabezados también se generan.

Puede hacerlo con el comando mysqldump . Eche un vistazo a las opciones --tab y --xml.

He creado un procedimiento para automatizar la exportación del contenido de una mayor cantidad de tablas a un 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 de que puede establecer el delimitador y el carácter de comillas para usar.

Utilicé el comando anterior y lo modifiqué según mis requisitos.
Necesitaba obtener la columna de contraseñas de la base de datos mysql de wordpress en un archivo de texto, para ello utilicé el siguiente comando

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top