Экспорт данных из SQLite 3 - PullRequest
9 голосов
/ 08 декабря 2010

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

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

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

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

sqlite3 db .dump | grep INSERT

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

Есть предложения?

Ответы [ 4 ]

11 голосов
/ 08 декабря 2010

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

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

.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 ) и другой со схемой БД ( schema.sql ).

2 голосов
/ 08 декабря 2010

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

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

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

 SELECT ID FROM TableA

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

0 голосов
/ 10 июля 2018

Вы можете использовать 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");
..
0 голосов
/ 08 декабря 2010

вы также можете использовать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...