Napsal jsem program, který vypíše výsledek na standardní výstup ve striktně čisté podobě CSV (každý řádek představuje jeden záznam a obsahuje stejnou sadu polí oddělených čárkami, pole obsahují pouze malá anglická písmena, čísla a tečky, žádné mezery, žádné uvozovky a žádné symboly, které by mohly vyžadovat escapování/kódování).
Jak přesměruji tento výstup do tabulky SQLite, do které se perfektně hodí?
Bylo by skvělé, kdybych mohl řídit, zda chci, aby porušení omezení (např. mít stejný primární/sekundární klíč jako záznamy již v tabulce) nahradilo existující záznamy, nebo bylo potichu vyřazeno.
Samozřejmě bych mohl zabudovat přímou podporu výstupu databáze SQLite v programu samotném, ale pokud je to možné, preferoval bych cestu unixu.
Přijatá odpověď:
Dva přístupy:
Ukázka test.csv
soubor:
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 ) Pomocí csvkit (sada nástrojů příkazového řádku pro převod do CSV a práci s ním)
Importujte do sqlite3 databáze:
csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv
Pokud nebyl zadán žádný vstupní soubor csv, bude přijímat data csv z stdin:
... | csvsql --db sqlite:///test_db --tables test_tbl --insert
Chcete-li extrahovat data z sqlite databáze:
sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'
Výstup:
GroupName,Groupcode,GroupOwner,GroupCategoryID
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
2 ) Pomocí sqlite3 nástroj příkazového řádku (umožňuje uživateli ručně zadávat a spouštět příkazy SQL proti SQLite databáze)
Použijte „
.import
” k importu dat CSV (hodnota oddělená čárkami)
do tabulky SQLite. Soubor „.import
” přebírá dva argumenty, které
jsou název souboru na disku, ze kterého se mají číst data CSV, a
název tabulky SQLite, do které se mají
vkládat data CSV.Pamatujte, že je důležité nastavit „mode“ na „csv“ před spuštěním
„.import
“příkaz. To je nezbytné k tomu, aby se shell příkazového řádku
nepokoušel interpretovat text vstupního souboru jako nějaký jiný
formát.
$ 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>