Sequel 0.0.9 - Concise ORM for Ruby

Sequel is a new ORM tool for Ruby. Sequel provides the following
features:

  • Thread safety and connection pooling. You can write multi-threaded
    applications that connect to databases without worrying about handling
    connections.
  • A concise, chainable query DSL lets you stay close to the metal
    without writing SQL. You don’t have to define model classes.
  • Datasets support filtering, ordering, summarizing, and joining.
  • Records are fetched one at a time, so you can work with huge result
    sets.
  • Currently has adapters for Postgresql, SQLite and MySQL (preliminary
    support).
  • Model classes work in similar fashion to ActiveRecord (but are
    currently missing some functionality.)

RDoc documentation is here: http://sequel.rubyforge.org
The source code is here: http://ruby-sequel.googlecode.com/svn/trunk

A Short Example:

require ‘sequel/sqlite’

open an in-memory SQLite database

DB = Sequel.open ‘sqlite:/:memory:’

create a table

DB.create_table :items do
primary_key :id, :integer, :auto_increment => true
column :name, :text
column :price, :float
end

popuplate table

100.times {DB[:items] << {:name => “product#{rand(1000)}”, :price =>
rand * 100}}

create a dataset of highest priced products with a price over 70

expensive_stuff = DB[:items].filter(‘price >
70’).reverse_order(:price).limit(10)

puts “There are #{expensive_stuff.count} expensive items.”

puts “Most expensive items (in descending order)”
expensive_stuff.each {|i| puts “#{i[:name]} = #{i[:price]}”}

print average of most expensive products

puts “Average of expensive stuff: #{expensive_stuff.avg(:price)}”


Sequel is in an early stage of development, so some things might be
broken. I appreciate any comments as well as bug reports. Enojy!