MySQL道普請便り
第73回 RubyからMySQLを操作してみる
今回は,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
というライブラリを利用して,