Экспорт данных из 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