2012-02-29 60 views
2

我有一個ruby腳本,它將讀取某些CSV文件中的數據並將它們導入到sqlite數據庫中。使用Ruby腳本將CSV文件導入到sqlite3

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

我如何能實現相同的形式Ruby腳本: 我可以很容易地從控制檯中使用以下命令來執行這個任務?

我做類似的像下面的內容(只是一個以防萬一的工作):

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(或其他ORMs上)作爲SQLite數據庫的接口。創建一個簡單的類以包含日期,用戶,活動和註釋字段,並讓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

不,這不是'一次性工作'。我需要讀取多個小的csv文件,並將它們保存在sqlite3數據庫中 – suvankar 2012-02-29 16:24:21

+0

非常感謝..還有一件事,在我的csv文件的第一行中包含Column標題,並跳過該行。 – suvankar 2012-03-02 06:40:23