【SQLite】CSVとSQLiteの連携方法について

データベース

データベース管理ツールとして、手軽に利用できるSQLite。

非常に様々な機能が詰まっているため、できればSQLiteのみで管理&開発していきたいところですが、
場合によっては、CSVなどの外部ファイルが必要になることがあると思います。(チームで開発しているときなど。)

そんなとき、CSVとSQLiteの連携方法として、この記事が参考になれば幸いです。

「SQLite → CSV」の出力

出力手順

  • 1
    メニューの「File > Export」から「Table(s) as CSV file…」を選択。
  • 2
    出力するテーブルを選択して「Save」を選択。

    下にある出力オプションは必要に応じて変更してみてください。

  • 3
    出力先を選択して「保存」を選択。
  • 4
    Completedの画面が表示されると出力完了となります。

出力オプションについて

以下のように出力オプションを設定することで、出力結果を調整することができます。

項目名内容
Column names in first line列名を先頭に出力します。
Field separatorCSVの分割文字を指定できます。(CSVと言いつつ、TSVなども出力できるみたいですね)
Quote character指定した文字を含む場合、文字として判断するためのエスケープ文字を指定します。
New line characters改行に使用する文字列を指定できます。

出力したCSVをエクセルで編集するとき

出力したCSVファイルをそのままエクセルで開くと、日本語が文字化けしてしまいます。
エクセルで開く際は「データ > テキストまたはCSVから」から読込してあげると、文字化けを回避することができます。

なぜ文字化けするの?

エクセルは「SJIS」や「UTF-8(BOM付き)」で記載されたCSVであれば正常に読込できます。
一方、エクスポートしたCSVファイルは「UTF-8」でエンコードされているため、日本語表記を正しく認識できず、文字化けしてしまいます。

「テキストまたはCSVから」でファイルを開く際も「UTF-8」が指定されているため読込ができるというわけです。

「CSV → SQLite」の取込

取込手順

  • 1
    メニューの「File > Import」から「Table from CSV file…」を選択。
  • 2
    取込元を選択して「開く」を選択。
  • 3
    「Table name」指定して「OK」を選択。

    下にある取込オプションは必要に応じて変更してみてください。

    ※同名のテーブルがある場合は、データの追加を行うか確認するメッセージが表示されます。問題がなければ「Yes」で次に進みます。

  • 4
    Completedの画面が表示されると取込完了となります。

取込オプションについて

出力と同じように、取込にもいくつかのオプションを設定することができます。

項目名内容
Table name取込先のテーブル名を指定します。
Column names in first lineチェックを付与すると、先頭行を列名として認識します。
Field separator各列の分割文字を指定します。
Quote character指定した文字を含む場合、文字として判断するためのエスケープ文字を指定します。
Encoding改行に使用する文字列を指定します。
Trim fields?チェックを付与すると、各値の前後の空白を除外します。

また、出力時とは違い、より高度な設定ができる「Advanced」の項目もあるようです。

項目名内容
Disable data type detectionチェックを付与すると、データ型の判断を自動で行わず、すべて入力値そのままで判断します。
Ignore default valuesチェックを付与すると、値がなかった時にデフォルト指定値を設定せず、必ずNULLが入ります。
Fail on missing valuesチェックを付与すると、必須列の値がなかったときにエラーとして判断します。エラーとなると、そこで取込は中断されます。

取込エラーの種類

取込方法によっては、以下のようにエラーとして判断されます。

エラーメッセージ内容
キー項目が重複するような追加があるときに表示されます。
テーブルと取込ファイルの列が異なるときに表示されます。

エクセル等で作成したCSVを取込するとき

エクセル等で作成したCSVを取込するとき、文字コードの違いによって文字化けが起きてしまいます。しかし、これはバグではなく、取込するファイルに合わせて「Encoding」の指定を行うことで解消できます。

まとめ

多少の手間はかかりますが、CSVとSQLite間でデータの連携を行うことができました。CSVの方が使い勝手が良い時もあるので、用途に合わせて使い分けできるのはありがたいですね。

一番良いのは、SQLiteかCSVのどちらかで完結することですが…

タイトルとURLをコピーしました