我正在使用Ruby从远程MySQL数据库自动报告。 我正在使用多个查询(而不是将它们合并为一个查询),因为我最终希望根据一列或几列中的给定值拆分行。 它还使我可以选择跨不同的数据库甚至不同的主机工作。
我使用的是mysql2
、watir
和csv
红宝石。
我的代码:
#!/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 JOIN
和WHERE
条件组成。 这个问题已经简化了。
上述代码在 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文件,不带括号或引号;但我似乎无法做到这一点。
提前感谢您的任何帮助。
编辑:我正在使用这个问题的帮助。
您可能希望使用以下代码
month.zip(report).each {|row| csv << row.flatten}