Ruby + MySQL을 처리할 때, MySQL 운영체제 라이브러리에서 'ruby-mysql'이나 'mysql2'가 사용되는 경우가 많다고 생각하지만, 그 라이브러리 없이 원시 Ruby 환경에서 MySQL 쿼리 작업을 수행해야 했기 때문에, 그때 작성한 소스를 일반화하고 요약해보려 했습니다. 음... 거의 필요 없을 수도 있지만, 팁으로 공유하고 싶었습니다.
mysql_query.rb
DB = { :d b_config => "~/.user.cnf", :d b_name => "database_name" }
query = "db_table_name에서 선택 * 여기서 primary_key_id = 1;"
RES = '/USR/BIN/MySQL --defaults-extra-file=#{db.fetch(:d b_config)} -D #{db.fetch(:d b_name)} -e \"#{query}\" '
만약 res.empty라면? 그렇다면
P "데이터는 없다."
그렇지 않으면
라인 = res.split("\n")
columns = lines.first.split("\t")
결과 = []
lines.each_with_index { |라인, i|
만약 0>면,
tmp_hash = {}
값 = line.split("\t")
values.each_index { |j|
만약 values[j].match(/^\d+$/)라면,
tmp_hash[columns[j]] = values[j].to_i
그렇지 않으면
tmp_hash[columns[j]] = 값[j].to_s
끝
}
결과 < tmp_hash
end
}
p results
end
やってることは、コマンドラインでMySQLのクエリを発行しているのと同義で、標準出力としてのMySQLクエリの結果をRuby側で取り込んでハッシュにパースしているだけです。 なお、MySQL5.6からコマンドラインにパスワードを付与してmysqlコマンドを実行すると警告が出てしまうので、MySQLへの接続は.user.cnfのファイルに書いて、そっちからインポートするようにしている。
.user.cnf
[의뢰인]
사용자 = <MySQLのユーザー名>
비밀번호 = <MySQLのログインパスワード>
호스트 = <MySQLのホスト名(RDSのエンドポイント等)>
그래서 당신이 그것을 실행하면,
$ 루비 mysql_query.rb
[{"primary_key_id"=>1, "column_name1"=>11, "column_name2"=>2, "column_name3"=>"e76a76ec", "column_name4"=>"medium", "column_name5"=>"a", "column_name6"=>"2316e746", "column_name7"=>"1.0.0", "datetime"=>"2014-09-29 10:41:35", "status"=>"done", "description"=>"NULL"}]
$
그리고 MySQL 쿼리 실행 결과는 열명 해시를 키로 한 배열을 반환합니다. 쿼리를 주장하여 함수로 바꾸면, 단순한 CRUD로도 사용할 수 있습니다... 하지만 결국 거의 필요하지 않을 것입니다 (^_^;</MySQLのホスト名(RDSのエンドポイント等)></MySQLのログインパスワード></MySQLのユーザー名>