2012-07-02 45 views
0

我從MySQL返回查詢結果,我需要將它們追加到csv文件中。我可以檢索數據併成功顯示,但無法將其寫入csv。到目前爲止,這是我的Ruby。如何將數據庫結果保存爲Ruby中的CSV

#! /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和欣賞,你有什麼建議。

回答

1

使用mysql gem(mysql2不同),只能通過一次使用each_hash迭代mysql結果集:在消耗一行之後,mysql不再返回給你,因爲它認爲你已經完成了它。你第一次打電話給each_hash會消耗所有的行,所以當你第二次遍歷它時,沒有剩下的行,並且你沒有輸出。

如果您刪除puts版本輸出的它應該工作

+0

我刪除了看跌期權聲明,現在我產生CSV.open塊內的錯誤。有關該部分的任何建議?我在我的問題中包含錯誤信息。 – analyticsPierce

相關問題