从SQLite3导出数据

bmvo0sr5  于 2023-10-23  发布在  SQLite
关注(0)|答案(5)|浏览(199)

我需要一种简单的方法来从多个表的SQLite数据库导出数据,然后将它们导入到另一个数据库。
这是我的剧本。我有五张table:A,B,C,D,E.
每个表都有一个主键作为第一列,称为ID。我想要一个Unix命令,将转储只从主键的格式,可以导入到另一个数据库的行中的数据。
我知道我可以

sqlite3 db .dump | grep INSERT

但这给了我表中的所有数据。我不是一个数据库Maven,我试图用所有的unix命令来写shell脚本,而不是写C代码来做这件事(因为人们告诉我这是最简单的方法)。我只是拒绝写C代码来完成一个可能在命令行中用4-5条语句就能完成的任务。
有什么建议吗?

eimct9ow

eimct9ow1#

这可能看起来有点奇怪,但是你可以给予一个尝试:
创建文本文件,并在其中放置以下语句:

.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

结果,您将得到两个文件:一个使用简单的“inserts”(* insert.sql ),另一个使用数据库模式( schema.sql *)。

kknvjkwl

kknvjkwl2#

建议找一个可以将您的查询导出为CSV的工具。听起来你想要一个剧本。你想重复使用和自动化吗?
对于其他场景,可能考虑sqlite-manager Firefox plugin。它支持运行您的即席查询,并将结果导出为CSV。
在这里面,给予它这样的陈述:

SELECT ID FROM TableA

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

stszievb

stszievb3#

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

xfb7svmp4#

你也可以使用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
fjnneemd

fjnneemd5#

例如,您可以使用以下命令仅将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
  • 我的答案解释了如何导出模式和数据。

相关问题