将hash保存到sqlite3 ruby

时间:2013-01-13 01:24:29

标签: ruby-on-rails ruby ruby-on-rails-3 sqlite

我有一个小的ruby脚本,它收集数据然后将它们保存在哈希中,然后将它们存储在sqlite数据库中。

哈希看起来像这样:

@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 :(得分: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,但对于简单的数据导入脚本来说,这些东西太重了。