从SQLite 3导出数据

时间:2010-12-08 16:41:45

标签: sql sqlite

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

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

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

我知道我可以做一个

sqlite3 db .dump | grep INSERT

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

有什么建议吗?

4 个答案:

答案 0 :(得分: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 ),另一个带有db模式( schema.sql )。

答案 1 :(得分:2)

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

对于其他场景,可以考虑sqlite-manager Firefox plugin。它支持运行您的即席查询,并将结果导出为CSV。

在此范围内,请发表以下声明:

 SELECT ID FROM TableA

根据需要对每个表重复。

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用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");
..