簡體   English   中英

從SQLite 3導出數據

[英]Exporting data from SQLite 3

我需要一種簡單的方法從多個表的SQLite數據庫導出數據,然后將它們導入另一個數據庫。

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

每個表都有一個主鍵作為名為ID的第一列。 我想要一個Unix命令,它只能以可導入另一個數據庫的格式從主鍵轉儲行中的數據。

我知道我能做到

sqlite3 db .dump | grep INSERT

但是這給了我表中的所有數據。 我不是數據庫專家,我正在嘗試使用所有unix命令來編寫shell腳本,而不是編寫C ++代碼來執行此操作(因為這是人們告訴我這是最簡單的方法) 。 我只是拒絕編寫C ++代碼來完成一項任務,可以在命令行的4-5語句中完成。

有什么建議?

這可能看起來有點奇怪,但你可以嘗試一下:

創建文本文件並在其中放置以下語句:

.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( schema.sql )。

建議找一個可以查詢並導出為CSV的工具。 聽起來你想要一個腳本。 您想重用並自動化嗎?

對於其他場景,也許可以考慮使用sqlite-manager Firefox插件 它支持運行您的adhoc查詢,並將結果導出為CSV。

在其中,給它這個聲明:

 SELECT ID FROM TableA

根據需要對每個表重復。

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

你可以使用sqlite3 bash。 例如,如果要對一個表中的所有記錄進行insert查詢,可以執行以下操作:

$ sqlite3 /path/to/db_name.db
>>.mode insert
>>.output insert.sql
>>select * from table_name;

它將創建一個名為insert.sql的文件名,並為給定表中的每個記錄添加insert查詢。

您在insert.sql獲得的insert.sql

INSERT INTO "table" VALUES("data for record one");
INSERT INTO "table" VALUES("data for record two");
..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM