从SQLite3导出数据

问题描述 投票:0回答:5

我需要一种简单的方法来从包含多个表的 SQLite 数据库中导出数据,然后将它们导入到另一个数据库中。

这是我的场景。我有 5 张桌子:A、B、C、D、E。

每个表都有一个主键作为第一列,称为 ID。我想要一个 Unix 命令,它仅以可以导入到另一个数据库的格式转储主键行中的数据。

我知道我可以做一个

sqlite3 db .dump | grep INSERT

但这给了我表中的所有数据。我不是数据库专家,我尝试使用所有可以编写 shell 脚本的 unix 命令来执行此操作,而不是编写 C++ 代码来执行此操作(因为人们告诉我这是最简单的方法) 。我只是拒绝编写 C++ 代码来完成可以通过命令行 4-5 条语句完成的任务。

有什么建议吗?

sql database sqlite export database-table
5个回答
11
投票

这可能看起来有点奇怪,但是你可以尝试一下:

创建文本文件并在其中放置以下语句:

.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
投票

建议找到一个可以将您的查询导出到 CSV 的工具。听起来你想要一个剧本。您想重用并自动化它吗?

对于其他场景,也许可以考虑 sqlite-manager Firefox 插件。它支持运行即席查询并将结果导出到 CSV。

其中,给出以下声明:

 SELECT ID FROM TableA

根据需要对每个表重复此操作。


2
投票

您可以使用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
投票

您还可以使用SQLite的

quote
功能。

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql

0
投票

例如,您可以使用以下命令仅将

apple.db
中特定表的数据导出到
backup.sql
。 *
.output
根据文件存在创建并选择或仅选择文件,并且您必须退出才能关闭文件(例如,
.exit
.quit
),否则SQLite命令的结果将输出到文件中:

sqlite3 apple.db
sqlite> .mode insert
sqlite> .output backup.sql
sqlite> SELECT * FROM person, animal;
sqlite> .exit

*我的回答解释了如何导出架构和数据。

© www.soinside.com 2019 - 2024. All rights reserved.