Come Esportare un file CSV da MySQL da Linea di Comando

0
761

Valori Separati da virgola (CSV) sono un modo di trasferire i dati tra le applicazioni. Database come MySQL e software di foglio di calcolo come Excel supporta l’importazione e l’esportazione di CSV, in modo che è possibile utilizzare file CSV per lo scambio di dati tra i due.

I file CSV sono in chiaro, quindi sono naturalmente leggero e facile da esportare da MySQL.

Dal Database Del Server

Se hai accesso al server MySQL è in esecuzione, è possibile esportare una selezione con i IN OUTFILE comando.

SELECT id, colonna1, colonna2 DA tavolo
IN OUTFILE ‘/tmp/mysqlfiles/tabella.csv”
CAMPI TERMINATO DA ‘,’
RACCHIUSO DA ‘”‘
LINEE TERMINATA DA ‘n’

Questo l’output di un file CSV per /tmp/mysqlfiles/tabella.csv, o dovunque è stato configurato. Avrai bisogno di assicurarsi che l’utente MySQL in esecuzione (di solito mysql o root) è la proprietà e l’accesso in scrittura alla directory.

Inoltre, è necessario assicurarsi che il secure_file_priv impostazione consente di MySQL per accedere alla directory. Questo, per impostazione predefinita, i blocchi di accesso in lettura e scrittura di una query SQL. Questa è una buona cosa, se il tuo codice è vulnerabile agli attacchi SQL injection, qualsiasi potenziale aggressore, avrebbe accesso a MySQL, e non il resto del filesystem.

È possibile whitelist directory specifiche modificando il file di configurazione di MySQL (di solito si trova in /etc/my.cnf) include:

[mysqld]
secure file priv = “/tmp/mysqlfiles”

Che permetterà di MySQL per leggere e scrivere /tmp/mysqlfiles/ (che dovrete creare con mkdir). Una volta che MySQL può esportare i file, si dovrebbe essere in grado di eseguire la query e l’output di file CSV.

Con ALLEGATA DA impostazione, la virgola sarà correttamente scappato, ad esempio,:

“3”,”uscire”,”anche questo”

Che si può prendere e importare direttamente in qualsiasi programma di foglio di calcolo o altri software.

Tenete a mente che il file CSV esportato non include le intestazioni di colonna, ma le colonne saranno nello stesso ordine, come l’istruzione SELECT. Inoltre, i valori null vengono esportati come N, che è il comportamento previsto, ma se vuoi cambiare questo, è possibile modificare la selezione avvolgendo ifnull(campo, “”) intorno ai campi nell’istruzione SELECT.

Da MySQL Da Linea Di Comando

Se si dispone solo della riga di comando di accesso all’istanza di MySQL, e non l’accesso al server stesso (ad esempio, quando non è gestito da te, nel caso di Amazon RDS), il problema è un po ‘ più complicato. Mentre è possibile utilizzare i CAMPI TERMINATO DA ‘,’ sul server per generare un elenco separato da virgole, MySQL CLI separata con schede per impostazione predefinita.

Basta inserire una query dalla riga di comando, e il tubo in un file:

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

Perché MySQL uscita è separato con schede, questo è chiamato un file TSV, per “valori separati da tabulazione”, e il lavoro al posto del file CSV in alcuni programmi come foglio di calcolo importazioni. Ma non è un file CSV, e la conversione è complicato.

Si potrebbe semplicemente sostituire ogni scheda con una virgola, che avrebbe funzionato, ma potrebbe causare a fallire se non ci sono virgole nei dati di input. Se siete completamente sicuri al 100% che non ci sono virgole nel tuo file TSV (controllare con grep), è possibile sostituire le schede con sed:

sed “s/t/,/g” di uscita.tsv > output.csv

Ma se si dispone di una virgola i tuoi dati e dovrete usare molto di più regex:

sed “s/’/’/;s/t/”,”/g;s/^/”/;s/$/”/;s/n//g” di uscita.tsv > output.csv

Questo sarà correttamente fuga campi con le virgolette, in grado di risolvere la virgola problema.

Nota: il carattere di tabulazione t non è standard. Su macOS e BSD, non è disponibile, il che porta a un pasticcio di ogni minuscolo “t” causando sed inserimento errato virgole. Per risolvere questo problema, è necessario utilizzare un letterale scheda carattere di t:

sed “s/ //g” di uscita.tsv > output.csv

Se i dati di input contiene le schede, sei fuori di fortuna, e sarà necessario generare un file CSV da te con un linguaggio di scripting.

Farlo Manualmente Con un Vero e proprio Linguaggio di Programmazione

MySQL (e la maggior parte dei database) sono progettati per essere interagito con, quindi è probabile avere una sorta di linguaggio di programmazione collegato a MySQL già. La maggior parte delle lingue può anche scrivere su disco, in modo che è possibile creare il proprio output CSV script leggendo i campi del database direttamente, la fuga di loro correttamente, e la scrittura di un file delimitato da virgole.

Un esempio in Python.