2012-02-29 14 views
2

私はいくつかのCSVファイルからデータを読み込んでsqliteデータベースにインポートするrubyスクリプトを持っています。Rubyスクリプトを使用してCSVファイルをsqlite3にインポートする

sqlite> .import <filename> <tablename> 
sqlite> .import test.csv PROJECT_REPORT 

がどのように私は同じフォームRubyスクリプトを達成することができます 私は、次のコマンドを使用して、コンソールから簡単にこの作業を行うことができますか?

私は次のように似たような(arroundのちょうど仕事を)やっている:それは1時間の仕事だ場合

CSV.foreach("timelog.csv") do |row| 
    database.execute("INSERT INTO PROJECT_REPORT(
    Date,User,Activity,Comment) 
    values 
    (#{row[0]}, '#{row[1]}', '#{row[2]}', '#{row[3]}') ") 
end 

答えて

2

と、あなたがすでに持っているものに固執していない理由は動作します簡単なスクリプトを持っていますか? Rubyスクリプトを拡張して展開する必要がある場合は、DataMapper(または他のORMのもの)をSQLiteデータベースのインタフェースとして見てください。 Date、User、Activiy、およびCommentフィールドを含むシンプルなクラスを作成し、DataMapperをデータベースに重労働させます。

datamapperの例で更新 ここにdatamapperの実装例を示します。 これはテストされていません!

#datamapper configuration here 
#. 
#. 
class UserActivity 
include DataMapper::Resource 

    property :id,   Serial  
    property :log_date,  DateTime 
    property :user,  Text   
    property :activity Text 
    property :comment  Text 
    property :created_at, DateTime 
end 

したがって、上記のあなたの例ではそれを使用する...

CSV.foreach("timelog.csv") do |row| 
    userActivity = UserActivity.new(:log_date => row[0], :user => row[1], :activity => row[2], :comment => row[3]) 
    userActivity.save! 
end 

は明らかにこれは完全な解決策ではありませんが、それはあなたが開始されます。

+0

これは「1回限りの仕事」ではありません。私は複数の小さなcsvファイルを読み込み、sqlite3データベースでそれらを永続させる必要があります – suvankar

+0

ありがとうございます。私のcsvファイルの最初の行には列ヘッダーが含まれています。 – suvankar

関連する問題