我从MySQL返回查询结果,我需要将它们附加到csv文件。我可以检索数据并成功显示它但是无法将其写入csv。到目前为止,这是我的Ruby。
#! /usr/bin/ruby
require 'mysql'
require 'csv'
# variables
file_path = '/Users/pierce/tmp/'
# need mysql queries here / use mysql2 calls
test_db = Mysql.new("localhost", "root", "", "db")
series_1_results = test_db.query("SELECT 'Impressions' AS label_imp,FORMAT(sum(impressions),',') AS impressions FROM table ")
series_1_results.each_hash do |f|
puts "#{f['label_imp']}"",\"""#{f['impressions']}""\""
end
最后一个陈述给出了正确的结果:印象,“34,017”。当我删除它并包含下面的CSV.open语句时,我得到以下错误。第87行开始:csv<<
CSV.open("#{file_path}"'test_file.csv', "wb") do |csv|
series_1_results.each_hash do |s1|
csv << ["#{s1['label_imp']}","#{s1['impressions']}"]
end
end
test_csv.rb:87:in `[]': can't convert String into Integer (TypeError)
我正在运行Ruby 1.9.2并感谢您的任何建议。
答案 0 :(得分:1)
使用mysql gem(mysql2不同)你只能用each_hash
迭代一次mysql结果集:在消耗了一行之后,mysql不再将它返回给你,因为它认为你完成了它。您对each_hash
的第一次调用会占用所有行,因此当您再次遍历它时,没有剩下的行并且您没有输出。
如果您删除了puts
版本的输出,则应该