Экспорт из sqlite в csv с помощью сценария оболочки


88

Я делаю сценарий оболочки для экспорта запроса sqlite в файл csv, примерно так:

 #!/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"

При выполнении сценария выходные данные отображаются на экране, а не сохраняются в out.csv. Он работает с тем же методом с командной строкой, но я не знаю, почему сценарий оболочки не может экспортировать данные в файл.

Что я делаю не так?

Ответы:


125

sqlite3

У вас есть отдельный вызов sqlite3для каждой линии; к тому времени, когда ты selectбежишь, о тебе .out out.csvуже забыли.

Пытаться:

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

вместо.

методы sh / bash

Вы можете вызвать свой скрипт с перенаправлением:

$ your_script >out.csv

или вы можете вставить следующее в качестве первой строки в свой сценарий:

exec >out.csv

Первый метод позволяет вам указывать разные имена файлов, а второй выводит в конкретное имя файла. В обоих случаях строку .output out.csvможно игнорировать.


Отлично, спасибо, теперь работает! (и нужно ">>" вместо ">", но я новичок в linux: D)
Рорро

1
Если ответ здесь действительно отвечает на ваш вопрос, вы должны щелкнуть галочку под общим количеством голосов за ответ (он должен показаться вам светло-серым). Это помечает вопрос как ответ.
tzot

Извините за задержку, я настоящий новичок: D
Рорро

<<! ... !именно то, что мне нужно. Спасибо.
Ростислав Дружченко

172

Вместо команд с точкой вы можете использовать параметры команды sqlite3:

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

Это делает его однострочным.

Также вы можете запустить файл сценария sql:

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

Используйте sqlite3 -helpдля просмотра списка доступных опций.


3
Намного, намного лучше ... это должно быть приемлемым решением! KISS :-)
pvandenberk 05

5
Это решение также будет работать в Windows, если sqlite3 находится на вашем пути или в том же каталоге.
amenthes

7

Недавно я создал сценарий оболочки, который сможет брать таблицы из файла db и преобразовывать их в файлы csv.

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

Не стесняйтесь задавать мне любые вопросы по моему сценарию :)


3
Это мне помогло. Вы должны скопировать и вставить свои 10 строк кода в свой ответ, тогда голос за, который я уже дал, будет более оправданным.
mxmlnkn

В скрипте отсутствуют кавычки вокруг имени таблицы (выдает ошибку, если в имени таблицы есть тире)
Эрик Ф.

0

Хотя вопрос касается сценария оболочки, я думаю, что он поможет немногим из тех, кто просто озабочен переносом данных из базы данных sqlite3 в файл csv.

Я нашел очень удобный способ сделать это с помощью браузера Firefox, используя расширение SQLite Manager.

Просто подключитесь к файлу базы данных sqlite в firefox (менеджер SQlite -> подключите базу данных), а затем Table -> Export table. Вам будет предложено еще несколько вариантов, которые вы можете просто щелкнуть и попробовать ....

В итоге вы получите CSV-файл с таблицей, которую вы выбрали для экспорта.


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

Теперь поищите в своей системе, например, файл .csv, и вы его получите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.