Экспорт данных из SQLite 3

Мне нужен простой способ экспортировать данные из базы данных SQLite из нескольких таблиц, а затем импортировать их в другую базу данных.

Вот мой сценарий. У меня есть 5 таблиц: A, B, C, D, E.

Каждая таблица имеет первичный ключ в качестве первого столбца с именем ID. Я хочу команду Unix, которая будет выгружать ТОЛЬКО данные в строке из первичного ключа в формате, который можно импортировать в другую базу данных.

Я знаю, что могу сделать

sqlite3 db .dump | grep INSERT

но это дает мне ВСЕ данные в таблице. Я не эксперт по базам данных, и я пытаюсь делать это со всеми командами Unix, в которых я могу написать сценарий оболочки, а не писать код C++ для этого (потому что это то, что люди говорят мне, что это самый простой способ), Я просто отказываюсь писать код C++ для выполнения задачи, которую можно выполнить в 4-5 операторах из командной строки.

Какие-либо предложения?

4 ответа

Это может выглядеть немного странно, но вы можете попробовать:

Создайте текстовый файл и разместите там следующие утверждения:

.mode insert
.output insert.sql
select * from TABLE where STATEMENT; -- place the needed select query here
.output stdout

Поток этот файл в sqlite3:

$ sqlite3 -init initf DATA.DB .schema > schema.sql

В результате вы получите два файла: один с простыми "вставками" (insert.sql) и другой со схемой db (schema.sql).

Предложите найти инструмент, который может принять ваш запрос и экспортировать в CSV. Похоже, вы хотели сценарий. Вы хотели повторно использовать и автоматизировать это?

Для других сценариев, возможно, рассмотрите плагин sqlite-manager Firefox. Он поддерживает запуск ваших запросов adhoc и экспорт результатов в CSV.

В рамках этого сделайте следующее заявление:

 SELECT ID FROM TableA

Повторите для каждой таблицы, как вам нужно.

Вы можете использовать sqlite3 bash. Например, если вы хотите получить insert Для запроса всех записей в одной таблице вы можете сделать следующее:

$ sqlite3 /path/to/db_name.db
>>.mode insert
>>.output insert.sql
>>select * from table_name;

Это создаст имя файла с именем insert.sql и ставит insert запрос для каждой записи в данной таблице.

Образец того, что вы получаете в insert.sql:

INSERT INTO "table" VALUES("data for record one");
INSERT INTO "table" VALUES("data for record two");
..

Вы также можете использовать quote функция SQLite.

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql
Другие вопросы по тегам