嵌入SQL INSERT的Ruby语句-语法错误

嵌入SQL INSERT的Ruby语句-语法错误,sql,ruby,exception,insert,Sql,Ruby,Exception,Insert,我有以下Ruby脚本:它创建一个数据库,读取一个csv文件,并将每一行插入数据库 require "sqlite3" require "csv" require "pp" begin db = SQLite::Database.new("myDB.db") db.execute("CREATE TABLE IF NOT EXISTS MYTABLE(Id INTEGER PRIMARY KEY AUTOINCREMENT, stations TEXT, dayparts TEX

我有以下Ruby脚本:它创建一个数据库,读取一个csv文件,并将每一行插入数据库

 require "sqlite3"
 require "csv"
 require "pp"

begin
 db = SQLite::Database.new("myDB.db")
 db.execute("CREATE TABLE IF NOT EXISTS MYTABLE(Id INTEGER PRIMARY KEY AUTOINCREMENT, 
  stations TEXT, dayparts TEXT, age TEXT, rtg DOUBLE, reach DOUBLE")

 myData  = {}
 CSV.foreach("test_file.csv", :headers=>true, :header_converters => :symbol, :converters => :all)              
 do |row|
  row.to_hash.each do |key, value|
   mydata[key.to_sym] = value
  end
 db.execute("INSERT INTO myDB(stations, dayparts, age, rtg, reach) VALUES(?,?,?,?,?)", 
 myDATA[:stations], myData[:dayparts], myData[:age], myData[:rtg], mydata[:dlyrch000])
 end

rescue SQLite3::Exception => e
  puts "Exception occured"
  puts e

ensure
  db.close if db
end
当我使用静态数据运行此脚本时。就是这一行:

 db.execute("INSERT INTO myDB(stations, dayparts, age, rtg, reach) VALUES(?,?,?,?,?)", 
   myDATA[:stations], myData[:dayparts], myData[:age], myData[:rtg], mydata[:dlyrch000])
替换为:

 db.execute("INSERT INTO myDB(stations, dayparts, age, rtg, reach) VALUES(?,?,?,?,?)", 
 test, test, 33, .8989, .23434)
将使用此数据创建一个数据库

但当我尝试上面的脚本时,它会抛出一个异常:

 syntax error, unexpected ",", expecting ')' ... rtg, reach) VALUES (?,?,?,?,?)",  
 ---> myData [:stations], myData[....
等等


我尝试过不同的选择,但似乎无法回避。有人能帮我解决这个问题吗?

我可以看到三个语法错误

  • CREATE TABLE
    SQL语句作为结束引号前缺少的右括号。应该是这样的

    db.execute("CREATE TABLE IF NOT EXISTS MYTABLE(Id INTEGER PRIMARY KEY AUTOINCREMENT,
        stations TEXT, dayparts TEXT, age TEXT, rtg DOUBLE, reach DOUBLE)")
    
  • CSV.foreach
    的块必须与方法调用的右括号在同一行开始,如下所示

    CSV.foreach("test_file.csv", :headers => true, :header_converters => :symbol, :converters => :all) do |row|
      ...
    enc
    
  • 数据库构造函数在应该是
    SQLite3
    时使用
    SQLite
    。像这样

    db = SQLite3::Database.new("myDB.db")
    

我看不出您的代码中引发错误的部分有任何错误,但我认为您没有显示程序的当前版本,因为这离实现这一点还有很长的路要走。

我在上面添加了一些代码,因此应该清楚是什么导致了异常。谢谢你的帮助