0

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

最後のステートメントは正しい結果を示します:Impressions、"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)

私はRuby1.9.2を実行していますが、アドバイスをいただければ幸いです。

4

1 に答える 1

1

mysql gem(mysql2は異なります)を使用すると、mysqlの結果セットを1回だけ反復できますeach_hash。行が消費された後、mysqlは、行が終了したと見なすため、それを返しません。の最初の呼び出しeach_hashはすべての行を消費するため、2回目の呼び出しで行が残っておらず、出力が得られません。

puts出力のバージョンを削除すると、機能するはずです

于 2012-07-02T06:30:48.830 に答える