我需要一种简单的方法从多个表的SQLite数据库导出数据,然后将它们导入另一个数据库。
这是我的情景。我有5个表:A,B,C,D,E。
每个表都有一个主键作为名为ID的第一列。我想要一个Unix命令,它只能以可导入另一个数据库的格式从主键转储行中的数据。
我知道我可以做一个
sqlite3 db .dump | grep INSERT
但是这给了我表中的所有数据。我不是数据库专家,我正在尝试使用所有unix命令来编写shell脚本,而不是编写C ++代码来执行此操作(因为这是人们告诉我这是最简单的方法) 。我只是拒绝编写C ++代码来完成一项任务,可以在命令行的4-5语句中完成。
有什么建议吗?
答案 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");
..