Saya telah menulis sebuah program yang menampilkan hasil ke output standar dalam bentuk CSV murni yang ketat (setiap baris mewakili satu catatan dan berisi kumpulan bidang yang dipisahkan koma yang sama, bidang hanya berisi huruf kecil, angka dan titik bahasa Inggris, tanpa spasi, tidak ada tanda kutip dan tidak ada simbol yang mungkin perlu diloloskan/dikodekan).
Bagaimana cara mengarahkan output ini ke tabel SQLite yang cocok dengan sempurna?
Akan sangat bagus jika saya dapat mengontrol apakah saya ingin pemecahan batasan (misalnya memiliki kunci primer/sekunder yang sama dengan catatan yang sudah ada di tabel) mengganti catatan yang ada atau dibuang secara diam-diam.
Tentu saja saya mungkin membangun dukungan output database SQLite langsung dalam program itu sendiri, tetapi saya lebih suka menggunakan cara unix jika memungkinkan.
Jawaban yang Diterima:
Dua pendekatan:
Contoh test.csv
berkas:
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 ) Dengan csvkit (seperangkat alat baris perintah untuk mengonversi dan bekerja dengan CSV)
Impor ke sqlite3 basis data:
csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv
Jika tidak ada file csv input yang ditentukan, itu akan menerima data csv dari stdin:
... | csvsql --db sqlite:///test_db --tables test_tbl --insert
Untuk mengekstrak data dari sqlite basis data:
sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'
Keluaran:
GroupName,Groupcode,GroupOwner,GroupCategoryID
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
2 ) Dengan sqlite3 alat baris perintah (memungkinkan pengguna untuk memasukkan dan mengeksekusi pernyataan SQL secara manual terhadap SQLite basis data)
Gunakan “
.import
” perintah untuk mengimpor data CSV (comma Separated Value)
ke dalam tabel SQLite. “.import
Perintah ” mengambil dua argumen yang
adalah nama file disk dari mana data CSV akan dibaca dan
nama tabel SQLite tempat data CSV akan
dimasukkan.Perhatikan bahwa penting untuk menyetel “mode” ke “csv” sebelum menjalankan
“.import
" memerintah. Ini diperlukan untuk mencegah shell
baris perintah mencoba menafsirkan teks file input sebagai format
lainnya.
$ 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>