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
というライブラリを利用して,
バックナンバー
MySQL道普請便り
- 第139回 オンラインスキーママイグレーションツール gh-ostを使ってみよう[その2]
- 第138回 オンラインスキーママイグレーションツール gh-ostを使ってみよう[その1]
- 第137回 MySQLTunerを使ってチューニングの足がかりを見つけてみる
- 第136回 CHECK制約を利用してみよう
- 第135回 MySQL 8.0で追加されたoptimizer_switchのフラグについて
- 第134回 DDLと暗黙的なコミットについて
- 第133回 Partial Revokesによる権限の一部剥奪について
- 第132回 Internal Temporary Table(内部テンポラリテーブル)について[その2]
- 第131回 mysqldumpslowを使ってスロークエリログを解析してみる
- 第130回 クエリをプロファイリングしてみる
関連記事
- 第46回 MySQL Cluster 8.0.16 DMRリリースと開発者来日セミナー開催,PostgreSQLエンタープライズ・コンソーシアムが検証成果を公開
- 第44回 MySQL Clusterのご紹介,PostgreSQL関連記事紹介
- 第39回 Oracle OpenWorld 2018でのMySQL関連の発表,PostgreSQL 11リリース
- 第38回 LOCONDO.jpやLINEでのMySQL最新導入事例,PostgreSQL 11ベータ4リリース,Cassandra(イベント情報のみ)
- 第36回 MySQL 8.0へのバージョンアップ方法,PostgreSQL 11ベータ2リリース,MongoDB 4.0 リリース