Ho scritto un programma che restituisce il risultato allo standard output in formato CSV puro e rigoroso (ogni riga rappresenta un singolo record e contiene lo stesso insieme di campi separati da virgole, i campi contengono solo lettere inglesi minuscole, numeri e punti, senza spazi, nessuna virgoletta e nessun simbolo che potrebbe essere necessario eseguire l'escape/codificare).
Come posso reindirizzare questo output in una tabella SQLite in cui si adatta perfettamente?
Sarebbe fantastico se potessi controllare se voglio che l'interruzione dei vincoli (ad es. avere la stessa chiave primaria/secondaria dei record già nella tabella) sostituisca i record esistenti o venga eliminata silenziosamente.
Ovviamente potrei creare un supporto diretto per l'output del database SQLite nel programma stesso, ma preferirei seguire la via Unix, se possibile.
Risposta accettata:
Due approcci:
Esempio di test.csv
file:
GroupName,Groupcode,GroupOwner,GroupCategoryID
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
Liberty Elementary Teachers,Elem Teachers,13559,103
1st Grade Teachers,1stgrade,,104
2nd Grade Teachers,2nsgrade,13561,105
3rd Grade Teachers,3rdgrade,13562,106
Guidance Department,guidance,,107
1 ) Con csvkit (una suite di strumenti da riga di comando per la conversione e l'utilizzo di CSV)
Importa in sqlite3 banca dati:
csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv
Se non è stato specificato alcun file CSV di input, accetterà i dati CSV da stdin:
... | csvsql --db sqlite:///test_db --tables test_tbl --insert
Per estrarre dati da sqlite banca dati:
sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'
L'uscita:
GroupName,Groupcode,GroupOwner,GroupCategoryID
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
2 ) Con sqlite3 strumento da riga di comando (consente all'utente di immettere ed eseguire manualmente istruzioni SQL su un SQLite banca dati)
Usa ".import
” comando per importare dati CSV (comma Separated Value)
in una tabella SQLite. Il ".import
Il comando ” accetta due argomenti che
sono il nome del file del disco da cui devono essere letti i dati CSV e
il nome della tabella SQLite in cui devono essere
inseriti i dati CSV.
Tieni presente che è importante impostare la "modalità" su "csv" prima di eseguire
il ".import
comando ". Ciò è necessario per evitare che la shell della riga di comando
tenti di interpretare il testo del file di input come un altro formato
.
$ sqlite3
sqlite> .mode csv
sqlite> .import test.csv test_tbl
sqlite> select GroupName,Groupcode from test_tbl limit 5;
"System Administrators",sysadmin
"Independence High Teachers","HS Teachers"
"John Glenn Middle Teachers","MS Teachers"
"Liberty Elementary Teachers","Elem Teachers"
"1st Grade Teachers",1stgrade
sqlite>