それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby で mysql と sequel でぱぱっとアクセス

active record めんどくさいし

めんどうだし、遅いんですよ。SQLわかってれば、ActiveRecordってメッド生やすの面倒だし、オブジェクト作ったり手続きが面倒だったんで。

ruby で mysql2 を使ったアクセス

BestGem でダウンロード数を比較したらhttp://bestgems.org/search?q=mysql mysql2 がトリプルスコアで圧倒的だったので。これを使うことにした。

gem install mysql2

mysql2 の利用

使い方は、大変シンプル

  • client(connection)
  • Statement
  • Result

という王道の三本セット

require 'mysql2'

client = Mysql2::Client.new(host:"192.168.2.5", username:"takuya", password: "*********", database:"my_Db")
ret = client.query("select * from sample order by id desc limit 10 ");
ret.each{|row |
         p row
}
mysql2 で prepare ステートメント

mysql2公式に載ってた。

statement = @client.prepare("SELECT * FROM users WHERE login_count = ?")
result1 = statement.execute(1)
result2 = statement.execute(2)

名前付きbindをするのは、無理そう

トランザクション

自分で管理。

client.query("begin");
client.query("select * from sample order by id desc limit 10 ");
client.query("commit");

潔くていいし、低レベルレイヤなのでわかりやすいっすね。

sequel を使ってもう少しだけ抽象化

ruby のDBアクセスで、もう一つの定番はSequel

sequel はバックエンドにMysql2 を使える。いいね。

sequel 使うなら、ActiveRecord使えばいんだろうけどさ、rails 関連ってググラビリティの性能が悪いので、あまり好きじゃない。php 波にカオス。

gem install sequel

基本的な使いかた

require 'sequel'
require 'logger'


db = Sequel.connect('mysql2://takuya:**pass**@192.168.100.1/takuya_db',:loggers => [Logger.new($stdout)])
res =  db[:tablename]

res.each{|e|
 p e
}

ポイントは、 eachで回すまでクエリを発行しないところ。

sequel でトランザクション

トランザクションは、ブロックを渡す。これRubyっぽい。気に入った

db = Sequel.connect('mysql2://takuya:**pass**@192.168.100.1/takuya_db',:loggers => [Logger.new($stdout)])
db.transaction do 
  table =  db[:address]
  names.each{|e| 
    table.insert(e) 
  }
end

insert ・ update はハッシュ値で指定できて便利

データを突っ込むときは、ハッシュ値ベースで放り込めるので、オブジェクトあれば便利なんだろうけど、とりあえずファイルの値をつっこみたいとか、手作業でぱぱっと入れたいとかそういう時にすごく重宝するわこれ。

sequel で prepare

そのうち調べる。

ちょっと面倒なんだけどね。ハッシュのキーとバリューがあればできる。

参考資料

http://sequel.jeremyevans.net/