Memoize

BasicWerk   EC Support   Technique   Facebook  

20140817095510_ruby_sqlite3

ruby_sqlite3

 

Ruby から SQLite3 に接続。

 

環境:

% ruby -v
ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
# Mac OS X Marvericks
% sw_vers -productVersion
10.9.4

 

最初に sqlite3-ruby, dbd-sqlite3, dbi を gem install

 
% sudo gem install sqlite3-ruby
% sudo gem install dbd-sqlite3
% sudo gem install dbi
 

 

こちらがサンプルで使った db/table

sample.db
 
% sqlite3 -header -column -cmd '.width 7 9 30' sample.db "SELECT * FROM items;"
sys_id   item_num   item_name                     
-------  ---------  ------------------------------
1        100        Kind of Blue                  
2        100        Kind of Blue(Columbia)        
3        200        Milestone         
 

 

 

最初 DBI を使って接続したらこうなった・・・。

dbi_sample.rb
 
#! /usr/bin/ruby
# coding: utf-8
 
# this script doesn't work...
require 'rubygems'
require 'dbi'
 
dbh = DBI.connect('DBI:SQLite3:sample.db')
 
dbh.select_all("SELECT * FROM items") do |row|
    p row
end
 
dbh.disconnect
 

 

上記のスクリプトを実行しても nil が返ってきてしまう。

 
% dbi_sample.rb
nil
nil
nil
 

 

なんで? と思って「Ruby 逆引きハンドブック」の DBI のところを開いてみたら「執筆時点では、Ruby 1.9には対応していません」(2009年現在)とあって、ああそしてまだなのねと理解。

 

目的は SQLite3 に接続することなので、DBI は諦めて require 'sqlite3' で攻めることに。

sqlite3_sample.rb
 
#! /usr/bin/ruby
# coding: utf-8
 
require "sqlite3"
 
db = SQLite3::Database.new "sample.db"
 
db.execute( "select * from items" ) do |row|
    p row
end
 

 

実行してみる。

 
% sqlite3_sample.rb
["1", "100", "Kind of Blue"]
["2", "100", "Kind of Blue(Columbia)"]
["3", "200", "Milestone"]
 

 

https://github.com/sparklemotion/sqlite3-ruby

 

 


© Shin Nakamura/BasicWerk 2014