今回は、mysql2というライブラリを利用してMySQLへアクセスする方法を紹介したいと思います。mysql2はRuby on Railsでも利用されているライブラリで、
検証環境
第10回 yum, rpmインストールにおけるMySQL 5.
mysql2をインストールする際に、sudo yum install mysql-community-devel -yを実行しておきましょう。これを忘れると次のmysql2をインストール中にエラーが出て途中で停止してしまいます。
Rubyのインストールをする
CentOSでRubyをインストールする方法としては、
- rbenvとruby-buildを利用してインストールする
- rvmを利用してインストールする
- yumを利用してインストールする
- 自力でビルドをする
今回は手軽に試して行きたいので、
$ sudo yum install -y ruby ruby-devel
以上のコマンドでrubyをインストールすることができます。
mysql2をインストールする
Rubyでライブラリをインストールするには、gem installコマンドを使ってmysql2をインストールしてみましょう。
$ sudo gem install mysql2
正しくインストールができているかは、require 'mysql2'を実行した時にtrueが返ってきたら、LoadError: cannot load such file -- mysql2のようなメッセージが出た場合は、
$ irb irb(main):001:0> require 'mysql2' => true
gem installでインストールした場合に、bundlerがあります。こちらを使ってインストールを行う場合は以下のようにコマンドを実行してください。また、irbと打つのではなく、bundle exec irbとコマンドがちょっとだけ変わるのに注意をしてください。
$ gem install bundler $ bundle init $ ls Gemfile $ echo 'gem mysql2' > Gemfile $ bundle install $ bundle exec irb irb(main):001:0> require 'mysql2' => true
bundle installを行った時点で生成されているGemfile.ですが、Gemfile.の中身は以下のようになっており、
GEM
remote: https://rubygems.org/
specs:
mysql2 (0.5.1)
PLATFORMS
ruby
DEPENDENCIES
mysql2
BUNDLED WITH
1.16.1
mysql2を使ってMySQLに接続をする
rubyのインストールとmysql2のインストール、
require 'mysql2'
client = Mysql2::Client.new(host: "localhost", username: "root", password: '', database: 'mysql')
上記のように、MySQL2::Clientクラスを使って接続を行います。引数にrubyのハッシュ値を渡すことで、
| オプション | オプションの意味 |
|---|---|
| host | 接続先のホスト情報 |
| username | 接続に使用するユーザ名 |
| password | 接続に使用するパスワード |
| database | 接続するデータベース |
| socket | unixドメインソケットの情報 |
| port | 接続先のポート情報 |
| encoding | 文字エンコーディングの指定 |
これ以外でどのようなオプションがあるのか気になる方は、
SQLを実行してみる
接続することができたので、queryメソッドにSQL文字列を渡す事で実行されます。今回は文字列を結合する方式で行っているため、
$ cat main.rb
require 'mysql2'
client = Mysql2::Client.new(host: "localhost", username: "root", password: '', database: 'mysql')
escaped = client.escape('performance_schema')
results = client.query("SELECT Db FROM db WHERE Db = '#{escaped}'")
results.each do |row|
puts row
puts row['Db']
end
$ bundle exec ruby main.rb
{"Db"=>"performance_schema"}
performance_schema
上記のコードを実行するとSELECTが実行されて、
プリペアードステートメントを使ってみる
さて、
$ cat main2.rb
require 'mysql2'
client = Mysql2::Client.new(host: "localhost", username: "root", password: '', database: 'mysql')
statement = client.prepare('SELECT Db FROM db WHERE Db = ?')
results = statement.execute('performance_schema')
results.each do |row|
puts row
puts row['Db']
end
$ bundle exec ruby main2.rb
{"Db"=>"performance_schema"}
performance_schema
今回はprepareメソッドとexecuteメソッドを使用しています。prepareメソッドでプリペアードステートメントを定義しています。SQL中で、?と書きます。
その後、executeメソッドで実行しています。引数にはプログラムからSQLに与えたい文字列を渡しています。こちらもqueryメソッドで実行したときと同様に、
まとめ
今回は、mysql2というライブラリを利用して、