196

データベースの一部の SQLite3 テーブル (すべてのテーブルではない) のデータをダンプし、スキーマではなくデータのみをダンプするにはどうすればよいですか? ダンプは、後でデータベースに簡単に再入力でき、コマンド ラインから実行する必要があるため、SQL 形式にする必要があります。何かのようなもの

sqlite3 db .dump

ただし、スキーマをダンプしたり、ダンプするテーブルを選択したりしません。

4

13 に答える 13

221

ダンプされたファイルで何をしたいのかを言っているのではありません。

CSV ファイルを取得するには (ほとんどすべてのものにインポートできます)

.mode csv 
-- use '.separator SOME_STRING' for something other than a comma.
.headers on 
.out file.csv 
select * from MyTable;

SQL ファイルを取得するには (別の SQLite データベースに再挿入できます)

.mode insert <target_table_name>
.out file.sql 
select * from MyTable;
于 2008-10-13T22:18:56.783 に答える
173

.schema コマンドと .dump コマンドの違いを取得することで、これを行うことができます。たとえば、grep の場合:

sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -vx -f schema.sql dump.sql > data.sql

data.sqlファイルには、次のようなスキーマのないデータのみが含まれます。

BEGIN TRANSACTION;
INSERT INTO "table1" VALUES ...;
...
INSERT INTO "table2" VALUES ...;
...
COMMIT;

これがお役に立てば幸いです。

于 2011-09-23T08:10:04.137 に答える
38

.dump特殊コマンドに1つ以上のテーブル引数を指定できます(例:sqlite3 db ".dump 'table1' 'table2'"

于 2009-12-21T06:12:45.527 に答える
38

最善の方法ではありませんが、少なくとも外部ツールは必要ありません (とにかく *nix ボックスの標準である grep を除く)

sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'

ただし、探しているテーブルごとにこのコマンドを実行する必要があります。

これにはスキーマが含まれないことに注意してください。

于 2009-01-08T01:04:10.387 に答える
10

Paul Egan の回答の改善として、これは次のように実現できます。

sqlite3 database.db3 '.dump "table1" "table2"' | grep '^INSERT'

- また -

sqlite3 database.db3 '.dump "table1" "table2"' | grep -v '^CREATE'

もちろん、注意点として、grep をインストールする必要があります。

于 2011-11-01T23:19:31.797 に答える
4

Command Line Shell For SQLiteの SQLite ドキュメントによると、単に「モード」を「csv」に設定し、クエリを実行して目的の行を抽出するだけで、SQLite テーブル (またはテーブルの一部) を CSV としてエクスポートできます。テーブル:

sqlite> .header on
sqlite> .mode csv
sqlite> .once c:/work/dataout.csv
sqlite> SELECT * FROM tab1;
sqlite> .exit

次に、「.import」コマンドを使用して、CSV (カンマ区切り値) データを SQLite テーブルにインポートします。

sqlite> .mode csv
sqlite> .import C:/work/dataout.csv tab1
sqlite> .exit

考慮すべき 2 つのケースについては、詳細なドキュメントを参照してください: (1) テーブル "tab1" が以前に存在していない、および (2) テーブル "tab1" が既に存在している。

于 2017-01-19T09:38:31.023 に答える
3

最良の方法は、スキーマ部分を除いて、sqlite3 db ダンプが実行するコードを取得することです。

疑似コードの例:

SELECT 'INSERT INTO ' || tableName || ' VALUES( ' || 
  {for each value} ' quote(' || value || ')'     (+ commas until final)
|| ')' FROM 'tableName' ORDER BY rowid DESC

参照: src/shell.c:838 (sqlite-3.5.9 の場合) 実際のコードについては

そのシェルを取り、スキーマ部分をコメントアウトして、それを使用することさえできます。

于 2008-09-17T02:05:18.947 に答える
2

このバージョンは、挿入内の改行でうまく機能します:

sqlite3 database.sqlite3 .dump | grep -v '^CREATE'

CREATE実際には、改行が含まれる可能性が低い行で始まるすべての行を除外します

于 2012-05-16T13:40:43.577 に答える
-3

各フィールドの後にコンマを挿入してテーブルを選択して csv を生成するか、GUI ツールを使用してすべてのデータを返し、それを csv に保存することができます。

于 2008-09-16T18:55:07.250 に答える