在所有列中使用多个Ruby查询创建CSV

时间:2016-02-24 15:28:01

标签: mysql arrays ruby csv

我正在使用Ruby从远程MySQL数据库自动报告。我正在使用多个查询(并没有将它们合并为一个),因为我最终希望根据一列或多列中的给定值拆分行。它还为我提供了跨不同数据库甚至不同主机工作的选项。

我正在使用mysql2watircsv Ruby宝石。

我的代码:

#!/usr/local/bin/ruby
require "mysql2"
require "watir"
require "csv"

puts "Initializing Report"

Mysql2::Client.default_query_options.merge!(:as => :array)

mysql = Mysql2::Client.new(:host => "1.2.3.4", :username => "user", :pass => "password", :database => "db")

puts "Successfully accessed db"

month = mysql.query("SELECT DATE_FORMAT(db.table.start, '%m') FROM db.table WHERE db.start.group = 1;")

report = mysql.query("SELECT db.table.name, db.table.company, db.table.type FROM db.table WHERE db.start.group = 1;")

CSV.open("Report.csv", "wb") do |csv|
  csv << ["Month", "Name", "Company", "Type"]
  month.zip(report).each {|row| csv << row}
end

puts "Results can be found in Report.csv"

现在report查询要大得多,从几十个INNER JOINWHERE条件中划分了数十列和几千行。这个问题已经简化了。

上面的代码在CSV文件中给出的输出是:

Month, Name, Company, Type
["1"], ["Adam", "companyrecordlabel", "Ficticious"]
["1"], ["Alana", "beeUrself", "Made-up"]
  .                   .
  .                   .
  .                   .
["12"], ["Zed", "Meds4U", "Fake"]

和我想要的输出:

Month, Name, Company, Type
1, Adam, companyrecordlabel, Ficticious
1, Alana, beeUrself, Made-up
.             .
.             .
.             .
12, Zed, Meds4U, Fake

我一直在努力工作几个小时,我似乎无法获得我想要的输出。

我已阅读CSV文件,将多个(和多维)数组输出到.txt文件,并将单个(大)查询写入CSV文件,不带括号或引号;但我似乎无法做到这一点。

提前感谢您提供任何帮助。

编辑:我正在使用this问题的帮助。

1 个答案:

答案 0 :(得分:1)

您可能想要使用以下代码

'#d20'