2013-01-13 20 views
0

我有这个小ruby脚本收集数据,然后将它们保存在一个散列,然后将它们存储在一个sqlite数据库。将散列保存到sqlite3 ruby​​

散列看起来是这样的:

@track = {:name => "Chris Brown", :song => "Sweet Love", :time => "3:20", :album => "Fortune" } 

而且我有一个保存这个散列成一个SQLite数据库的方法:

def add_db 
db = SQLite3::Database.new("playlist.sqlite") 
sql = "INSERT INTO tracks (name, song, time, album)" + 
      "VALUES(#{@track[:name]}, #{@track[:song]},#{@track[:time]}, #{@track[:album]})" 
db.execute(sql) 
db.close 
end 

但我得到这个错误:initialize': near "Playlist": syntax error (SQLite3::SQLException)

是这是将散列值保存到sqlite3的方法吗?

+1

为什么不使用主动记录? –

+0

@JesseWolgamott我可以在ruby脚本中使用它,请详细解释并提供示例。 – SHUMAcupcake

+0

你已经接受了答案,但是你可以。我展示了一个例子http://jessewolgamott.com/dbfu/ –

回答

1

你的问题是,你不引用任何东西,你要插入这样的SQLite最终看到这样的事情:

insert into tracks (name, song, time, album) values (Playlist, ...) 

这不是有效的SQL。你应该使用占位符:

db.execute(
    'insert into tracks (name, song, time, album) values (?, ?, ?, ?)', 
    @track[:name], @track[:song], @track[:time], @track[:album] 
) 

你也可以使用ActiveRecord,但对于简单的数据导入脚本来说太重了。

+0

真棒,它的作品! – SHUMAcupcake