Експорт із sqlite до csv за допомогою сценарію оболонки


87

Я роблю сценарій оболонки для експортування запиту 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
Рорро,

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

171

Замість команд точки ви можете використовувати параметри команди 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щоб переглянути список доступних опцій.


2
Набагато, набагато краще ... це має бути прийнятим рішенням!
Поцілунок

4
Це рішення також буде працювати у вікнах, якщо sqlite3 знаходиться на вашому шляху або в тому ж каталозі.
Аментес,

7

Нещодавно я створив скрипт оболонки, який зможе взяти таблиці з файлу db і перетворити їх у файли CSV.

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

Не соромтеся задавати мені будь-які питання щодо мого сценарію :)


2
Це мені допомогло. Вам слід скопіювати та вставити у відповідь 10 рядків коду, тоді голосування, яке я вже дав, буде більш виправданим.
mxmlnkn

У сценарії відсутні лапки навколо назви таблиці (він видає помилку, якщо в назві таблиці є тире)
Ерік Ф.

0

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

Я знайшов дуже зручний спосіб зробити це за допомогою браузера Firefox за допомогою розширення SQLite Manager.

Просто підключіться до файлу бази даних sqlite у Firefox (менеджер SQlite -> підключення бази даних), а потім - Таблиця -> Експортувати таблицю. Вам запропонують ще кілька варіантів, які ви можете просто натиснути і спробувати ....

Врешті-решт ви отримаєте файл 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

Тепер знайдіть у вашій системі файл example.csv, і ви отримаєте його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.