使用Ruby脚本将CSV文件导入sqlite3

时间:2012-02-29 15:44:49

标签: ruby csv sqlite

我有一个ruby脚本,它将读取某些CSV文件中的数据并将它们导入sqlite数据库。 我可以使用以下命令从控制台轻松完成此任务:

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 

1 个答案:

答案 0 :(得分: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

显然这不是一个完整的解决方案,但它会让你开始。