Esportare i risultati di una query Mysql in formato CSV

Pubblicato il 15/04/2021

Qualche tempo fa ho avuto la necessità di esportare da Mysql dei dati in formato CSV. I dati da esportare erano ottenuti a partire da una query SQL con varie join e trasformazioni.

Vincoli:

  • non potevo creare il file sul server Mysql, quindi non ho potuto usare INTO OUTFILE direttamente nella query di produzione dei dati,
  • dovevo utilizzare il client mysql da riga di comando, quindi ad esempio niente Mysql Workbench.

Cercando in rete ho trovato su Stack Overflow una buona soluzione. L’idea era eseguire la query attraverso il client mysql e andare a trasformare l’output del comando in formato CSV utilizzando il comando sed.

L’idea si è rivelata una buona base di partenza, durante l’utilizzo ho migliorato la trasformazione dell’output risolvendo vari problemi che ho incontrato nel mio scenario.

mysql -u USER -p -B DB < QUERY.sql | sed 's/"/\\"/g' | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\"NULL\"/NULL/g;s/\n//g" >RESULT.csv

Lo script sopra presentato mantiene la licenza dello script originale: CC BY-SA 3.0.

  • I contenuti di questo articolo sono rilasciati con licenza CC-BY 4.0
  • Eventuali spezzoni di codice presentati seguono, dove non dichiarato, licenza MIT