ページ

2011年10月22日土曜日

Ruby on Rails ~Sqlite3へデータをインポート (ubuntu10.04JP)

● Sqlite3へ、.csv /.txtファイルからデータをインポート

   まずはSqlite3のドキュメントを見ると、インポートの方法として ".import Data_FILE DB_TABLE" とある
   また、ネット上の情報では以下のように示されていて、この方法でうまくいった

$ sqlite3 -separator , /home/hito/photos/db/development.sqlite3 ".import /home/hito/dbtest.txt photos"

   データベースが "development.sqlite3"、テーブル名は "photos"、インポートするデータのファイルが "dbtest.txt"である
   "dbtest.txt" の拡張子は ".csv" でも可。 また、ファイル内の記述として、文字列の括りに使われる ダブル・クォーテーションは消しておく。 今回は不具合がなかったが、文字コードと改行も影響すると思われる。 ちなみに "dbtest.txt" は UTF-8、Linux標準の改行コード

   実行結果は、

Error: /home/hito/dbtest2.txt line 1: expected 20 columns of data but found 17

   と表示された。 エラー・メッセージは、「20コラムあるべきところ、見つかったのは17項」との事。 Scaffoldで打ち込んだ内容を確認したが、作成されたテーブルはやはり17項目で合っている
   テーブルの構造を確認するために、Firefoxに "Sqlite Manager" というアドオンを入れ、Railsで作成されたSqlite3のデータベースを参照するよう、 "/home/hito/photos/db/development.sqlite3" を指定した。 すると、Scaffoldで指定したコラム以外に、頭に "ID" というデータ・ベースの "キー" に当たるコラムが、末尾には "Created" と "Updated" という2つの日付のコラムが追加されていた (Railsの仕様との事) ので、これに対応するコラムを "dbtest.txt" に追記した。 ちなみに日付は "2011/10/22" という形式で対応できた

   再度トライ。

$ sqlite3 -separator , /home/hito/photos/db/development.sqlite3 ".import /home/hito/dbtest3.csv photos"

$

   エラーは表示されず、間もなくプロンプトが現れた
   Firefoxで確認したところ、無事にデータがインポートされていた