次の 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[....
等
さまざまなオプションを試しましたが、これを回避できないようです。誰かがこれで私を助けてくれますか