Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2011年07月09日(土)

Ruby/SQLite3 その3

| 12:06 |  Ruby/SQLite3 その3 - Going My Ruby Way を含むブックマーク はてなブックマーク -  Ruby/SQLite3 その3 - Going My Ruby Way  Ruby/SQLite3 その3 - Going My Ruby Way のブックマークコメント

ぐぐってみると、ruby-sqlite3 のプレイスホルダーは環境によって 1番目の引数が無視されるバグがあるそうです。

Ubuntu 11.04, Ruby 1.9.1 で、その現象にあたりました。...orz

ruby-sqlite3 はメンテが滞っているらしく、バグもそのままのようです。

名前付きプレイスホルダーが使えないのは残念ですが、以下の対処でしのぎます。

>> "... VALUES ('%s', %s, %s)" % ['hello', 10, :NULL]
=> "... VALUES ('hello', 10, NULL)"

関連して String をちょっといじりました。

wrap は前に作ったやつです。(2010-10-30 - Going My Ruby Way - Rubyist)

class String
  alias quote wrap
  def q  ; quote("'") ; end
  def qq ; quote('"') ; end
end

テスト。

s = "hello"
s.q        # => 'hello'
s.qq       # => "hello"

Ruby/SQLite3 その 2

| 11:02 |  Ruby/SQLite3 その 2 - Going My Ruby Way を含むブックマーク はてなブックマーク -  Ruby/SQLite3 その 2 - Going My Ruby Way  Ruby/SQLite3 その 2 - Going My Ruby Way のブックマークコメント

属性名を使って値を取得する場合

require 'sqlite3'

db = SQLite3::Database.new("a.database.file")
db.results_as_hash = true   # この設定を行う
sql = <<-SQL
  SELECT * FROM table;
SQL

db.execute(sql) do |row|
  p row['attr1']
  p row['attr2']
end

db.close

参考にしたURL