2012-07-01 79 views
0

我想將查詢的結果帶到數據庫並將它們保存到csv文件中。這是我目前的Ruby腳本。如何將數據庫結果保存到Ruby中的文本文件

#! /usr/bin/ruby 

require 'rubygems' 
require 'mysql' 
require 'date' 

# need mysql queries here/use mysql2 calls 
db_con = Mysql.new("localhost", "root", "", "msd") 

date_results = db_con.query("SELECT CONCAT(CONVERT(date_format(dd.date, '%b-%e'),char),'\\n') AS date 
FROM msd.date_dim dd LEFT OUTER JOIN msd.results cs 
    ON dd.id = cs.date_id 
GROUP BY 
    dd.date") 

# create new xml file and insert header 
open('test_trend.xml', 'w') do |f| 
    date_results.each_hash do |f| 
    f.puts "#{f['date']}" 
    end  
end 

我收到以下錯誤消息。第23行是date_results.each_hash行。

so_test.rb:24:in `block (2 levels) in <main>': private method `puts' called for {"date"=>"Jun-12\n"}:Hash (NoMethodError) 
    from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.9/lib/mysql.rb:686:in `call' 
    from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.9/lib/mysql.rb:686:in `each_hash' 
    from so_test.rb:23:in `block in <main>' 
    from so_test.rb:22:in `open' 
    from so_test.rb:22:in `<main>' 

任何意見表示讚賞。謝謝。

+0

http://stackoverflow.com/questions/356578/how-to-output-mysql-query-results-in-csv-format – Casper

+0

@Casper感謝方向。我的示例已經過簡化,並且還有額外的測試行必須添加到文件以滿足要求。因此,在我的完整腳本中還有其他幾個f.puts圍繞着數據庫結果。 – analyticsPierce

+0

這不是csv。 Ruby有一個csv庫,可以轉義逗號和類似的東西。你在做什麼只是寫文本到一個文件。而xml是文件擴展名的事實使得它有點額外的混淆,因爲它不是xml數據。 – pguardiario

回答

2

在嵌套塊中,您將覆蓋f變量。相反,嘗試這樣的:

# create new xml file and insert header 
open('test_trend.xml', 'w') do |f| 
    date_results.each_hash do |hash| 
    f.puts "#{hash['date']}" 
    end  
end 
+0

太棒了。謝謝。 – analyticsPierce

相關問題