Cómo exportar un archivo CSV desde la línea de comandos de MySQL

Contenidos

Transporte de datos entre aplicaciones.

Los archivos de valores separados por comas (CSV) son una forma de transferir datos entre aplicaciones. Las bases de datos como MySQL y el software de hojas de cálculo como Excel admiten la importación y exportación a través de CSV, por lo que puede usar Archivos CSV para intercambiar datos entre los dos.

Los archivos CSV son texto sin formato, por lo que son naturalmente livianos y fáciles de exportar desde MySQL.

Desde el servidor de la base de datos

Si tiene acceso al servidor en el que se ejecuta MySQL, puede exportar una selección con el INTO OUTFILE mando.

SELECT id, column1, column2 FROM table
INTO OUTFILE '/tmp/mysqlfiles/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'

Esto generará un archivo CSV a /tmp/mysqlfiles/table.csv, o donde lo haya configurado. Deberá asegurarse de que el usuario que ejecuta MySQL (de forma general mysql o root) tiene propiedad y acceso de escritura al directorio.

Además deberá asegurarse de secure_file_priv La configuración posibilita que MySQL acceda a ese directorio. Esto, de forma predeterminada, bloquea el acceso de lectura y escritura de las consultas SQL. Ésto es una cosa buena; si su código es vulnerable a la inyección de SQL, cualquier atacante potencial solo tendría acceso a MySQL y no al resto del sistema de archivos.

Puede incluir directorios específicos en el listado blanca editando su archivo de configuración de MySQL (de forma general ubicado en /etc/my.cnf) para incluir:

[mysqld]
secure-file-priv = "/tmp/mysqlfiles"

Lo que permitirá a MySQL leer y escribir en /tmp/mysqlfiles/ (que deberás de crear con mkdir). Una vez que MySQL pueda exportar archivos, debería poder ejecutar la consulta y generar archivos CSV.

Con el ENCLOSED BY configuración, las comas se escaparán correctamente, a modo de ejemplo:

"3","Escape, this","also, this"

Que puede tomar e importar de forma directa a cualquier programa de hoja de cálculo u otro software.

Hoja de cálculo de una lista separada por comas.

Tenga en cuenta que el archivo CSV exportado no incluye encabezados de columna, pero las columnas estarán en el mismo orden que el SELECT declaración. Al mismo tiempo, los valores nulos se exportarán como N, que es el comportamiento esperado, pero si desea cambiar esto, puede modificar la selección envolviendo ifnull(field, "") alrededor de sus campos en su SELECT declaración.

Desde la línea de comandos de MySQL

Si solo tiene acceso de línea de comandos a la instancia de MySQL, y no tiene acceso al servidor en sí (como cuando usted no lo administra, en el caso de Amazon RDS), el problema es un poco más complejo. Mientras puedes utilizar FIELDS TERMINATED BY ',' en el servidor para generar una lista separada por comas, la CLI de MySQL se separará con pestañas de forma predeterminada.

Simplemente ingrese una consulta desde la línea de comando y canalícela a un archivo:

mysql -u root -e "select * from database;" > output.tsv

Debido a que la salida de MySQL está separada por pestañas, esto se denomina archivo TSV, para «valores separados por pestañas», y puede funcionar en lugar de su archivo CSV en algunos programas, como las importaciones de hojas de cálculo. Pero no es un archivo CSV y convertirlo en uno es complicado.

Simplemente podría reemplazar cada pestaña con una coma, lo que funcionaría pero haría que fallara si hay comas en los datos de entrada. Si está absolutamente seguro de que no hay comas en su archivo TSV (consulte con grep), puede reemplazar las pestañas con sed:

sed "s/t/,/g" output.tsv > output.csv

Pero si tiene comas en sus datos, tendrá que utilizar un mucho mas largo expresión regular:

sed "s/'/'/;s/t/","/g;s/^/"/;s/$/"/;s/n//g" output.tsv > output.csv

Esto escapará correctamente de los campos entre comillas, lo que resolverá el problema de las comas.

Nota: el carácter de tabulación t es no estándar. En macOS y BSD, no está habilitada, lo que genera un desorden de cada «t» minúscula que causa sed para insertar comas erróneas. Para solucionar esto, deberá utilizar un carácter de tabulación literal en lugar de t:

sed "s/  /,/g" output.tsv > output.csv

Si sus datos de entrada contienen pestañas, no tiene suerte y tendrá que generar un archivo CSV usted mismo con un lenguaje de secuencias de comandos.

Hágalo manualmente con un lenguaje de programación real

MySQL (y la mayoría de las bases de datos) están diseñadas para interactuar con él, por lo que es probable que ya tenga algún tipo de lenguaje de programación conectado a MySQL. La mayoría de los idiomas además pueden escribir en el disco, por lo que puede crear sus propios scripts de salida CSV leyendo los campos de la base de datos de forma directa, escapándolos correctamente y escribiendo un archivo delimitado por comas.

Un ejemplo en Python.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.