File di valori separati da virgole (CSV) sono un modo per trasferire dati tra applicazioni. Database come MySQL e software per fogli di calcolo come Excel supportano l'importazione e l'esportazione tramite CSV, quindi puoi usare File CSV scambiare dati tra i due.
I file CSV sono di testo normale, quindi sono naturalmente leggeri e facili da esportare da MySQL.
Dal server di database
Se si ha accesso al server su cui è in esecuzione MySQL, È possibile esportare una selezione con il comando INTO OUTFILE
comando.
SELECT id, colonna1, column2 FROM table INTO OUTFILE '/tmp/mysqlfiles/table.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'n'
Questo genererà un file CSV per /tmp/mysqlfiles/table.csv
, o dove l'hai configurato. Dovrai assicurarti che l'utente che esegue MySQL (in genere mysql
oh root
) ha la proprietà e l'accesso in scrittura alla directory.
Dovrai anche assicurarti che secure_file_priv
La configurazione consente a MySQL di accedere a quella directory. Questo, per impostazione predefinita, blocca l'accesso in lettura e scrittura alle query SQL. Questa è una buona cosa; se il tuo codice è vulnerabile a SQL injection, qualsiasi potenziale aggressore avrebbe accesso solo a MySQL e non al resto del filesystem.
Puoi autorizzare directory specifiche modificando il file di configurazione di MySQL (generalmente situato in /etc/my.cnf
) includere:
[mysqld] secure-file-priv = "/tmp/mysqlfiles"
Che consentirà a MySQL di leggere e scrivere su /tmp/mysqlfiles/
(con cosa dovresti creare mkdir
). Una volta che MySQL può esportare i file, dovrebbe essere in grado di eseguire la query e generare file CSV.
Con il ENCLOSED BY
collocamento, le virgole saranno correttamente sfuggite, come esempio:
"3","Fuga, questo","anche, questo"
Che puoi prendere e importare direttamente in qualsiasi programma di fogli di calcolo o altro software.
Tieni presente che il file CSV esportato non include le intestazioni di colonna, ma le colonne saranno nello stesso ordine delle SELECT
dichiarazione. Allo stesso tempo, i valori null verranno esportati come N
, qual è il comportamento previsto?, ma se vuoi cambiarlo, puoi modificare la selezione avvolgendo ifnull(field, "")
intorno ai loro campi nella loro SELECT
dichiarazione.
Dalla riga di comando di MySQL
Se hai solo accesso dalla riga di comando all'istanza MySQL, e non hai accesso al server stesso (come quando non ci riesci, in caso di Amazon RDS), il problema è un po' più complesso. Mentre puoi usare FIELDS TERMINATED BY ','
sul server per generare un elenco separato da virgole, La CLI di MySQL sarà a schede per impostazione predefinita.
Basta inserire una query dalla riga di comando e reindirizzarla a un file:
mysql -u root -e "Selezionare * dal database;" > output.tsv
Perché l'output di MySQL è a schede, questo si chiama file TSV, per “valori separati da tabulazione”, e potrebbe funzionare al posto del tuo file CSV in alcuni programmi, come le importazioni di fogli di calcolo. Ma non è un file CSV e convertirlo in uno è complicato.
Potresti semplicemente sostituire ogni scheda con una virgola, che funzionerebbe ma causerebbe il fallimento se ci sono virgole nei dati di input. Se sei assolutamente sicuro che non ci siano virgole nel tuo file TSV (consultare grep
), puoi sostituire le schede con sed
:
sed "s/t/,/g" output.tsv > output.csv
Ma se hai virgole nei tuoi dati, dovrai usare a molto più a lungo frase normale:
sed "S/'/'/;ns/","/G;s/^/"/;s/$/"/;s/n//g" output.tsv > output.csv
Questo uscirà correttamente dai campi tra virgolette, cosa risolverà il problema delle virgole?.
Nota: il carattere di tabulazione t
è non standard. Su macOS e BSD, non è abilitato, che genera un disordine di ciascuno “T” minuscolo che causa sed
inserire virgole sbagliate. Per risolvere questo, devi usare un carattere di tabulazione letterale invece di t
:
sed "s/ /,/g" output.tsv > output.csv
Se i tuoi dati di input contengono schede, sei sfortunato e dovrai generare tu stesso un file CSV con un linguaggio di scripting.
Fallo manualmente con un vero linguaggio di programmazione
MySQL (e la maggior parte dei database) sono progettati per interagire con lui, quindi probabilmente hai già un qualche tipo di linguaggio di programmazione connesso a MySQL. La maggior parte delle lingue può anche scrivere su disco, così puoi creare i tuoi script di output CSV leggendo direttamente i campi del database, salvandoli correttamente e scrivendo un file delimitato da virgole.
Articoli correlati
- Come usare “se comprendi i rischi e i vantaggi dell'utilizzo di una distribuzione basata su Arch” se comprendi i rischi e i vantaggi dell'utilizzo di una distribuzione basata su Arch
- Come trovare e rimuovere collegamenti simbolici interrotti in Linux
- Definisci un ottimo profilo Vim usando .vimrc
- Come usare Flameshot, uno strumento di screenshot per Linux