SQLiteのトリガとか

import sqlite3

はPython2.5しか受け付けないハズなので、2.4でも動作するように以下のようにしました(ただし動作確認してません)。2.4ではpysqlite2が必要です。

try:
    import sqlite3 as sqlite
except:
    import pysqlite2 as sqlite

それからSQLiteにトリガがあることを知ったので、タイムスタンプの更新に使えるのではないかと思い文法を調べてみたのですが、トリガ内で自分自身のフィールド値を変更する方法がわかりませんでした。ダメ元で以下のようなトリガを書いてみましたが、やはり通りませんでした。

create trigger t_node_bef_ins before insert on t_node 
begin 
  new.create_date=datetime('now', 'localtime');
end

やはりSQLiteのトリガではnewは参照専用のようです。Firebirdだとこれでいけるんですけどね。というわけで以下のようにしました。

create trigger t_node_aft_ins after insert on t_node 
begin 
  update t_node set create_date=datetime('now', 'localtime') 
  where id=new.id; 
end

この例ではこれでOKなんですが、update時にこれをやるときっと無限ループになると思われます。どうするんだろ〜。

rev.50でコミットしました。