詳細検索

기본 루비로 MySQL 쿼리 결과를 얻으세요

아바타
글쓴이 maeno
3분 읽기

기본 루비로 MySQL 쿼리 결과를 얻으세요
日本語에서 번역 • 원문 보기

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のユーザー名>

Related Articles