从SQLite 3导出数据

9
我需要一种简单的方法来从一个包含多个表的SQLite数据库中导出数据,然后将它们导入到另一个数据库中。
这是我的情况。我有5个表:A、B、C、D、E。
每个表都有一个名为ID的主键作为第一列。我想要一个Unix命令,只转储主键行中的数据,并以可导入到另一个数据库的格式进行导出。
我知道可以使用“sqlite3”命令来导出整个数据库,但我只需要特定行的数据。
sqlite3 db .dump | grep INSERT

但是这样会给我所有表中的数据。我不是一个数据库专家,我正在尝试使用所有Unix命令来编写shell脚本来完成它,而不是编写C++代码(因为人们告诉我这是最简单的方法)。我拒绝编写C++代码来完成可能可以在4-5个命令行语句中完成的任务。
有什么建议吗?

刚刚注意到......我对所有数据进行了转储,并尝试将其导入到同一个数据库中。主键需要是唯一的。那么我的脚本需要创建唯一的键吗?或者如果我去掉主键并将其设置为自动递增,插入操作会生成一个唯一的键吗? - David Vergolini
此外,数据将被导入的表结构将是相同的,我必须导出并导入与唯一ID相关联的5个表中的所有数据。因此,如果所有5个表都具有唯一ID为1和数据列,则需要将其导出到文件中,然后将其导入到另一个系统上相同的表结构中(数据库文件将存在)。 - David Vergolini
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)。


5
当改变模式时,建议包括表名:.mode insert TABLE。这将使生成的插入语句中包含表的名称。 - Brigham

2
建议找到一个可以将您的查询导出为CSV的工具。听起来像是您想要一个脚本。您想要重复使用和自动化吗?
对于其他情况,也许考虑使用 sqlite-manager Firefox插件。它支持运行您的即席查询,并将结果导出为CSV。
在其中,给出这个语句:
 SELECT ID FROM TableA

根据您的需要,对每个表格重复执行此操作。

sqlite3将转储为CSV……这不是我的问题,我不能使用第三方工具。它是一个封闭的系统,旨在为独特的用户(而非个人电脑)提供服务。该系统将使用Unix作为操作系统,因此我试图寻找Unix命令行解决方案。我的基本目标是根据主键导出到文件格式,然后将该文件带到另一个类似的系统并将数据导入该数据库。 - David Vergolini

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
例如,您可以使用以下命令将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

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

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

你能更详细地解释一下 quote 吗? - Zulu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接