¿Existe una forma sencilla de ejecutar una consulta MySQL desde la línea de comandos de Linux y obtener los resultados en formato CSV ?
Esto es lo que estoy haciendo ahora:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Se hace un lío cuando hay muchas columnas que necesitan ser rodeadas por comillas, o si hay comillas en los resultados que necesitan ser escapadas.
Desde http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
SELECT order_id,product_name,qty
FROM orders
WHERE foo = 'bar'
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Usando este comando los nombres de las columnas no serán exportados.
También tenga en cuenta que /var/lib/mysql-files/orders.csv
estará en el servidor que está ejecutando MySQL. El usuario con el que se ejecuta el proceso de MySQL debe tener permisos para escribir en el directorio elegido, o el comando fallará.
Si quieres escribir la salida en tu máquina local desde un servidor remoto (especialmente una máquina alojada o virtualizada como Heroku o Amazon RDS), esta solución no es adecuada.
mysql --batch, -B
Imprime los resultados utilizando el tabulador como separador de columnas, con cada fila en una nueva línea. Con esta opción, mysql no utiliza el archivo histórico. El modo por lotes da como resultado un formato de salida no tabulado y el escape de caracteres especiales. El escape puede ser desactivado usando el modo raw; ver la descripción de la opción --raw.
Esto le dará un archivo separado por tabulaciones. Dado que las comas (o las cadenas que contienen comas) no se escapan, no es sencillo cambiar el delimitador a coma.