2010-12-08 10 views
9

複数のテーブルのSQLiteデータベースからデータをエクスポートし、別のデータベースにインポートする簡単な方法が必要です。SQLite 3からのデータのエクスポート

これは私のシナリオです。

各テーブルには、IDと呼ばれる最初の列としてプライマリキーがあります。私は行内のデータのみをプライマリキーから別のデータベースにインポートできる形式でダンプするUnixコマンドが必要です。

私は

sqlite3 db .dump | grep INSERT 

を行うことができます知っているが、それは私のテーブル内のすべてのデータを提供します。私はデータベースのエキスパートではなく、シェルスクリプトを書くことができるすべてのunixコマンドでこれをやろうとしています。これはC++コードを書くことではなく(人が私に言っているのはそれが最も簡単な方法なので) 。私は、コマンドラインから4-5個のステートメントでできることを達成するためのC++コードの記述を拒否しています。

提案がありますか?

+0

私はすべてのデータのダンプを行い、同じデータベースにインポートしようとしました。主キーは一意である必要があります。私のスクリプトはユニークなキーを作成する必要がありますか?または、プライマリキーを削除して自動インクリメントに設定した場合、挿入操作によって一意のキーが生成されますか? –

+0

また、データをインポートするテーブル構造も同じで、ユニークIDに関連付けられた5つのテーブルからすべてのデータをエクスポートしてインポートする必要があります。したがって、5つのテーブルすべてにデータの列を持つ一意のIDが1の場合、そのデータをファイルにエクスポートし、別のシステムの同じテーブル構造にインポートする必要があります(データベースファイルが存在します)。 –

答えて

2

質問を受け取り、CSVにエクスポートできるツールを見つけることを提案します。あなたがスクリプトを望むように聞こえます。これを再利用して自動化したいですか?

他のシナリオでは、おそらくsqlite-manager Firefox pluginと考えてください。アドホッククエリの実行と結果のCSVへのエクスポートをサポートしています。その中で

、それをこの文を与える:

SELECT ID FROM TableA 

繰り返しを各テーブルにあなたが必要として。

+0

sqlite3はCSVにダンプします....これは私の問題ではないので、サードパーティのツールを使用することはできません。一意のユーザー(PCではなく)を対象としたクローズドシステムです。システムはUnixをOSとして使用するので、私はUNIXのコマンドライン・ソリューションを見つけようとします。私の本質的な目標は、主キーに基づいてファイル形式にエクスポートし、そのファイルを別の同様のシステムに持ち込み、そのデータベースにデータをインポートすることです。 –

0

また、quote SQLiteの機能を使用することもできます。

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql 
+0

'quote'についてもっと説明できますか? – Zulu

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 

結果として、2つのファイルが得られます。単純な「挿入」を持つファイル(挿入t.sql)、もう1つはdbスキーマ(schema.sql)です。

+4

モードを変更するときにテーブル名を含めることをお勧めします: '.mode insert TABLE'。これにより、生成された挿入ステートメントにテーブルの名前が含まれます。 – Brigham

関連する問題