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

70

Я создаю оболочку 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 не может экспортировать данные в файл.

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

Теги:
csv

4 ответа

115
Лучший ответ

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 может быть проигнорирована.

  • 0
    Спасибо, но это не работает ...
  • 1
    Попробуйте снова с отредактированным методом «sqlite3».
Показать ещё 3 комментария
133

Вместо текстовых команд вы можете использовать параметры команды 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, чтобы просмотреть список доступных параметров.

  • 2
    Намного, намного лучше ... это должно быть принятым решением! ПОЦЕЛУЙ :-)
  • 4
    Это решение также будет работать в Windows, если sqlite3 находится на вашем пути или в том же каталоге.
3

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

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

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

  • 1
    Это помогло мне. Вы должны скопировать и вставить свои 10 строк кода в свой ответ, тогда уже высказанное мной возражение будет более оправданным.
  • 0
    это здорово, спасибо
1

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню