Kabuk betiğini kullanarak sqlite'den csv'ye aktarın


89

Bir sqlite sorgusunu bir csv dosyasına vermek için bir kabuk betiği yapıyorum, aynen şöyle:

 #!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on"
./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv"
./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv"
./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;"
./bin/sqlite3 ./sys/xserve_sqlite.db ".exit"

Komut dosyası yürütülürken, çıktı "out.csv" dosyasına kaydedilmek yerine ekranda görünür. Komut satırıyla aynı yöntemi uygulayarak çalışıyor, ancak kabuk betiğinin neden verileri dosyaya dışa aktaramadığını bilmiyorum.

Neyi yanlış yapıyorum?

Yanıtlar:


125

sqlite3

sqlite3Her hat için ayrı bir aramanız var ; selectkoştuğun zaman .out out.csvunutulmuşsun.

Deneyin:

#!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db <<!
.headers on
.mode csv
.output out.csv
select * from eS1100_sensor_results;
!

yerine.

sh / bash yöntemleri

Komut dosyanızı bir yeniden yönlendirme ile çağırabilirsiniz:

$ your_script >out.csv

veya aşağıdakini komut dosyanıza ilk satır olarak ekleyebilirsiniz:

exec >out.csv

İlk yöntem, farklı dosya adları belirlemenize izin verirken, ikincisi belirli bir dosya adına çıktı verir. Her iki durumda da satır .output out.csvgöz ardı edilebilir.


Harika, teşekkürler, şimdi çalışıyor! (ve ">" yerine ">>" gerekli, ancak ben linux'ta yeni bir kişiyim: D)
Rorro

1
Burada bir cevap aslında Eğer cevap soru, yanıtın toplam oyların altındaki onay işaretini tıklamanız gerekmektedir (bu size açık gri görünmelidir). Bu, soruyu yanıtlanmış olarak işaretler.
tzot

Gecikme için özür dilerim, ben gerçek bir
acemiyim

<<! ... !tam da ihtiyacım olan şey. Teşekkürler.
Rostyslav Druzhchenko

173

Nokta komutları yerine, sqlite3 komut seçeneklerini kullanabilirsiniz:

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv

Bu, onu tek astarlı yapar.

Ayrıca, bir sql komut dosyası çalıştırabilirsiniz:

sqlite3 -header -csv my_db.db < my_script.sql > out.csv

sqlite3 -helpMevcut seçeneklerin listesini görmek için kullanın .


3
Çok, çok daha iyi ... kabul edilen çözüm bu olmalı! KISS :-)
pvandenberk

5
Bu çözüm, sqlite3'ün sizin yolunuzda veya aynı dizinde olması koşuluyla Windows üzerinde de çalışacaktır.
amenthes

7

Yakın zamanda tabloları bir db dosyasından alıp csv dosyalarına dönüştürebilecek bir kabuk betiği oluşturdum.

https://github.com/darrentu/convert-db-to-csv

Senaryomla ilgili soru sormaktan çekinmeyin :)


3
Bu bana yardımcı oldu. 10 satırlık kodunuzu cevabınıza kopyalayıp yapıştırmalısınız, o zaman daha önce verdiğim olumlu oy daha haklı olacaktır.
mxmlnkn

Komut dosyasında tablonun adının etrafında tırnak işaretleri eksik (tablo adında çizgiler varsa hata veriyor)
Eric F.

0

Soru kabuk betiği ile ilgili olsa da, verileri sqlite3 veritabanından bir csv dosyasına aktarmaktan rahatsız olanların bir kaçına yardımcı olacağını düşünüyorum.

SQLite Manager uzantısını kullanan firefox tarayıcısıyla bunu yapmanın çok uygun bir yolunu buldum.

Basitçe firefox'taki sqlite veritabanı dosyanıza (SQlite yöneticisi -> veritabanı bağlan) ve ardından Tablo -> Tabloyu dışa aktarın. Sadece tıklayıp deneyebileceğiniz birkaç seçenek daha sunulacak ...

Sonunda, dışa aktarılmayı seçtiğiniz tablo ile bir csv dosyası elde edersiniz.


0
Using command line for Linux:

user@dell-Admin: sqlite3 #activate your sqlite database first
sqlite> .tables #search for tables if any available if already created one.
sqlite> .schema #if you want to check the schema of the table.

# once you find your table(s), then just do the following:

sqlite> .headers on   #export along with headers (column names)
sqlite> .mode csv     #file type is csv
sqlite> .output example.csv   #you want to provide file name to export
sqlite> SELECT * from events;    #If entire table is needed or select only required
sqlite> .quit    #finally quit the sqlite3

Şimdi sisteminizde example.csv dosyası için arama yapın ve onu alacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.