rubyでDB(mysql)に保存された特定の値をcsvで書き出す


[まとめ] 現在開催中のKindleセール情報はこちら

ruby(1.9.3)でDB(mysql)に保存された特定の値をcsvで書き出すスクリプトを書いてみました。

SQLは実行結果をcsvファイルとして書きだすことができるので、普通はSQLだけで済ませられるのですが、今回はテーブルにJSON形式で保存されたデータから特定の値を書き出す必要があったのでスクリプトを書きました。

定義

以下のようなsampleテーブルがあるとします。

CREATE TABLE `sample` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`json_data` TEXT NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
);

また、json_dataカラムに保存されるjsonにはnameとmessageが格納されているとします。

{
name: "json",
message: "hello"
}

get_csv.rb

スクリプトは以下のようになりました。
DBから取得したデータをループで回し、jsonをパースして必要データをcsvに書きだしています。
また、highline/importを使用して、DBのユーザ名とパスワードをコマンドラインから入力するようにしています。

# get_csv.rb
require 'rubygems'
require 'bundler/setup'

require 'mysql2'
require 'highline/import'
require 'json'
require 'csv'

def ask_authentication
    username = ask("enter your username: ") { |q| q.echo = true }
    password = ask("enter your password: ") { |q| q.echo = "*" }
    [username, password]
end

username, password = ask_authentication
begin
  client = Mysql2::Client.new(:host => "localhost", :username => username, :password => password, :database => "sample")
rescue
  p 'can not login mysql'
  exit
end

res = client.query('select * from sample')

csv_string = CSV.generate(:force_quotes => true) do |csv|
  csv << ['id', 'name', 'message', 'created_at']

  res.each do |row|
    json = JSON.parse(row['json_data'])

    csv << [
      row['id'],
      json['name'],
      json['message'],
      row['created_at']
    ]
  end
end

File.open('info.csv', 'w:cp932') do |file|
  file.write(csv_string) 
end

Gemfileの作成

Gemfileに今回使用したgemを記述しておきます。

# Gemfile
source "https://rubygems.org"
                                                                                                                                                                                                                               
gem 'mysql2'
gem 'highline'

実行方法

cd {スクリプトのあるディレクトリ}
bundle install --path vendor/bundle
ruby get_csv.rb

bundle install –path vendor/bundle とすることで、gemをスクリプトのあるディレクトリ以下にインストールすることができ、環境を汚さずにスクリプトが実行できます。
スクリプトを実行するとcsvが出力されてできあがりです。

参考URL

[まとめ] 現在開催中のKindleセール情報はこちら