Экспорт из sqlite в csv с помощью оболочки script

Я создаю оболочку script для экспорта 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"

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

Что я делаю неправильно?

Ответ 1

sqlite3

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

Try:

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

вместо.

sh/ bash методы

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

$ your_script >out.csv

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

exec >out.csv

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

Ответ 2

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

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

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

Кроме того, вы можете запустить файл sql script:

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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