SQLite3 メモ

同じレコードをinsertしちゃうと重複レコードが−。

消すには…と消し方を探るより,重複なしでselectしたものを 別の表にコピーしてそれをマスターにしちゃえばいい。

create table newhoge as select distinct * from hoge;
drop table hoge;
alter table newhoge rename to hoge;

UNIQUE属性を付けた表を作ってそこにコピーのほうがいいか。

create table newhoge (id int UNIQUE, foo real, bar text)
insert into newhoge  select distinct * from hoge;
drop table hoge;
alter table newhoge rename to hoge;

Rubyから開く:

require 'sqlite3'
db = SQLite3::Database.new("ファイル")
# db.results_as_hash = true
db.execute("SQL文") do |row|
  # executeに直接ブロックを渡すとrowごとイテレータ
end

execute2メソッドだと,最初のrowに見出しが返る。

SQLite3/Ruby FAQ