Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将哈希保存到sqlite3 ruby_Ruby On Rails_Ruby_Ruby On Rails 3_Sqlite - Fatal编程技术网

Ruby on rails 将哈希保存到sqlite3 ruby

Ruby on rails 将哈希保存到sqlite3 ruby,ruby-on-rails,ruby,ruby-on-rails-3,sqlite,Ruby On Rails,Ruby,Ruby On Rails 3,Sqlite,我有一个小的ruby脚本,它收集数据,然后将它们保存在散列中,然后将它们存储在sqlite数据库中 散列如下所示: @track = {:name => "Chris Brown", :song => "Sweet Love", :time => "3:20", :album => "Fortune" } insert into tracks (name, song, time, album) values (Playlist, ...) 我有一个方法可以将这个散列保

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

散列如下所示:

@track = {:name => "Chris Brown", :song => "Sweet Love", :time => "3:20", :album => "Fortune" }
insert into tracks (name, song, time, album) values (Playlist, ...)
我有一个方法可以将这个散列保存到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':靠近“Playlist”:语法错误(SQLite3::SQLException)


这是将散列值保存到sqlite3中的第三种方法吗?

您的问题是,您没有引用要插入的任何内容,因此SQLite最终会看到如下情况:

@track = {:name => "Chris Brown", :song => "Sweet Love", :time => "3:20", :album => "Fortune" }
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,但有些东西对于简单的数据导入脚本来说太重了。

为什么不使用active record?@JessewLGamott我可以在ruby脚本中使用它吗,请解释更多内容并提供一个示例。您已经接受了答案,但是的,您可以。我举了一个例子@JesseWolgamott,但为了人类的利益,也许你可以发布一个答案=)