空のDBかどうかの判定

久しぶりに更新。

pysqliteで動的にDBを作成したりする場合、新規につくられたものか既存のものかをどうやって判定しようかと考えて、以前は以下のコードにしていました。

self.con = sqlite.connect(path)
cur = self.con.cursor()
cur.execute("SELECT count(*) FROM SQLITE_MASTER")
cnt = cur.fetchone()[0]
if cnt==0:
    self.__initTables()

以前はこれで通ってたと思うのですが、今日やってみたらセグメンテーション違反で落ちる。pythonの問題ではなく、sqliteコマンドでやっても同様に落ちる。何も落ちなくてもとは思うが、DDLが全く定義されていないDBで"SELECT count(*) FROM SQLITE_MASTER"は(仕様かバクかはともかく)NGということなのだろう。しかし"SELECT * FROM SQLITE_MASTER"なら通るので以下のようにしてみました。

self.con = sqlite.connect(path)
cur = self.con.cursor()
cur.execute("SELECT * FROM SQLITE_MASTER")
try:
   cnt = cur.fetchone()[0]
except:
   self.__initTables()

これでうまくいきました。こういうのってほんとは定石があるのかな?

ほか、ちょこちょこと弄ってコミット(rev.52、53)。