Sequelの使い方(SQLite)

下記のページを参考にSequelの使い方を勉強する。
README.rdoc

Sequelの簡単な使い方


例文に自分なりの解説を追加すると下記のようになった。

require 'rubygems'
require 'sequel'
DB = Sequel.sqlite # メモリ上のデータベースにアクセスするオブジェクト「DB」を作成

# itemsというテーブルを作成。
DB.create_table :items do
  primary_key :id    # プライマリキーとなるInt型の列「id」を作成
  String :name       # String型の列「name」を作成
  Float :price       # Float型の列「price」を作成
end

items = DB[:items] # テーブル「items」にアクセスするオブジェクトを作成

# テーブル「items」にレコードを挿入
items.insert(:name => 'abc', :price => rand * 100)
items.insert(:name => 'def', :price => rand * 100)
items.insert(:name => 'ghi', :price => rand * 100)

# レコード数を印字
puts "Items count: #{items.count}"

# priceの平均を印字
puts "The average price is: #{items.avg(:price)}"

f:id:ayaketan:20111215215136j:image

WHERE句のように条件で絞り込む場合はfilterを使用するとよい。

require 'rubygems'
require 'sequel'
DB = Sequel.sqlite 

DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

items = DB[:items] 

items.insert(:name => 'abc', :price => 90)
items.insert(:name => 'def', :price => 120)
items.insert(:name => 'ghi', :price => 150)

# レコード数を印字
puts "レコード数: #{items.count}"

# priceの平均を印字
puts "priceの平均: #{items.avg(:price)}"

# priceの値が100以上のpriceの平均を印字
puts "priceの平均: #{items.filter('price > 100').avg(:price)}"

f:id:ayaketan:20111215215207j:image

レコードの更新にはupdete、レコードの削除にはdeleteを使用する。

require 'rubygems'
require 'sequel'
DB = Sequel.sqlite 

DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

items = DB[:items] 

items.insert(:name => 'abc', :price => 90)
items.insert(:name => 'def', :price => 120)
items.insert(:name => 'ghi', :price => 150)

# レコード数を印字
puts "レコード数: #{items.count}"

# priceの平均を印字
puts "priceの平均: #{items.avg(:price)}"

#nameがabcのレコードのpriceを180に変更
items.filter('name = "abc"').update(:price => 180)

# priceの平均を印字
puts "priceの平均: #{items.avg(:price)}"

#nameがghiのレコードを削除
items.filter('name = "ghi"').delete

# レコード数を印字
puts "レコード数: #{items.count}"

f:id:ayaketan:20111215215223j:image

データベースファイルを作成する場合は、「Sequel.sqlite」の後にファイル名を指定する。

require 'rubygems'
require 'sequel'
DB = Sequel.sqlite('test.db')  # test.dbを作成し、接続

DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

items = DB[:items] 

items.insert(:name => 'abc', :price => 90)
items.insert(:name => 'def', :price => 120)
items.insert(:name => 'ghi', :price => 150)

# レコード数を印字
puts "レコード数: #{items.count}"

# priceの平均を印字
puts "priceの平均: #{items.avg(:price)}"

f:id:ayaketan:20111215215245j:image

作成済みのデータベースファイルに接続するには、connnectを使用する。

require 'rubygems'
require 'sequel'
DB = Sequel.connect('sqlite://test.db')  # 作成済みのtest.dbに接続

items = DB[:items] 

# レコード数を印字
puts "レコード数: #{items.count}"

# priceの平均を印字
puts "priceの平均: #{items.avg(:price)}"

f:id:ayaketan:20111215215303j:image