今回は、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
というライブラリを利用して、