sqlite3でテーブルをファイルに書き出す方法を知りたかったので調べた。対象のデータベースファイルがあるディレクトリへ移動してコンソールからsqlite3 <データベースファイル名>
と入力してデータベースに接続、そこから以下のようなイメージで入力。
.separator "\t" .headers on .output characterData.txt SELECT * FROM characterData; .output episodeData.txt SELECT * FROM episodeData; .output titleData.txt SELECT * FROM titleData; .exit
コマンドの意味は以下の通り。
.separator "\t"
- データの区切りとしてTABを使用することを宣言している。OracleのSQL*Plusで言う所の
set colsep
。 .headers on
- テーブルの列名を先頭に表示させる。後で
.import
するときを考えてonにしているが、不要なら記述しなくても良い。 .output <ファイル名>
- 出力先をファイルにする。こうすることで実質的にテーブルの中身をテキストへ保存することができる。出力先が変わるので画面には
SELECT
文の結果が表示されない。
テーブルを書き出すたびに宛先ファイル名を変える必要がある点には要注意。変えなくてもエラーにはならないが、レイアウトの違うテーブルが下にくっつく形になるのでバックアップデータとして使うのが難しくなる。都度.output
コマンドを実行すること。
毎回コマンドを手で打ち込むのは面倒なので、上のソースをexport-cmd.txtなど適当な名前で保存し、sqlite3 <データベースファイル名> < export-cmd.txt
としてリダイレクトでsqlite3に渡すと楽。