2010-12-08 120 views
9

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

这是我的场景。我有5个表:A,B,C,D,E。

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

我知道我可以做一个

sqlite3 db .dump | grep INSERT 

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

有什么建议吗?

+0

刚才提到.....我做了所有数据的转储,并试图导入到同一个数据库。主键需要是唯一的。所以我的脚本需要创建唯一的密钥?或者,如果我剥离主键并将其设置为自动递增,插入操作是否会生成唯一键? – 2010-12-08 17:08:17

+0

此外,数据将被导入的表结构将是相同的,我必须导出和导入与唯一ID关联的5个表中的所有数据。因此,如果所有5个表的唯一ID都是1,并且包含数据列,则需要将其导出到文件中,然后将其导入到另一个系统(数据库文件将存在)上的同一表结构中。 – 2010-12-08 17:16:25

回答

2

建议您查找可以查看并导出到CSV的工具。这听起来像你想要一个脚本。你想重复使用和自动化吗?

对于其他情况,可能考虑sqlite-manager Firefox plugin。它支持运行您的adhoc查询,并将结果导出为CSV。

在那,给它这样的说法:

SELECT ID FROM TableA 

重复每个表,因为你需要。

+0

sqlite3将转储成CSV ....这不是我的问题,我不能使用第三方工具。这是一个封闭的系统,旨在为独特的用户(而不是个人电脑)。系统将使用Unix作为操作系统,因此我试图找到unix命令行解决方案。我的基本目标是基于主键导出为文件格式,然后将该文件导入另一个类似的系统并将数据导入到该数据库中。 – 2010-12-08 17:10:41

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

你能给出更多关于`quote`的解释吗? – Zulu 2015-08-29 00:55:42

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 

结果你会得到两个文件:一个用简单的“插入”(inser t.sql)和另一个具有db架构(schema.sql)。