2013-01-13 64 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