pythonのdbmモジュールを使ってみた

pythonは二種類のデータベースを標準ライブラリで扱うことが出来ます。

一つがご存知sqlite3。前に使い方書いたやつね。これ

もう一つが今回使うdbmってやつ。

sqlite3はご存知のとおりSQL。リレーショナルデータベースです。 それに対してdbmはkey-value型のデータベース。つまりはpythonのdict型みたいに扱えるのね。

値に対する制限がちょっと厳しいけれど、その分簡単に使える感じ。 データベース操作言語を覚える必要もないしね。

データベースを開く/作る

import dbm

d = dbm.open('file', 'w')

これで読み書き可能な状態でデータベースを開くします。 ちなみに、ファイルが存在しなければdbm.errorが送出されます。 python2.xなら拡張子は勝手につけられるので必要ないです。

ご想像のとおり

d = dbm.open('file', 'r')

とすれば、読み出し専用で開かれます。 ファイルが存在しない場合はやっぱりdbm.errorが送出されます。

他にもモードがあって、'c'なら'w'と同じで、ただし存在しない場合は新規作成。 'n'なら常に上書きして作成するようになります。

読み書きしてみる

ファイルを開いたら早速読み書き。 て言っても基本はdict型と同じです。

import dbm
d = dbm.open('file', 'c')

d['a'] = '0'
d['b'] = '10'
d['c'] = '20'

print d['a'], d['b'], d['c']
# output: 0 10 20

print 'a' in d
# output: True

print d.keys()
# output: ['a', 'b', 'c']

こんな感じ。分かりやすくて良いよね。

注意しなきゃいけないのは、文字列(3.xならbytes)しか受け付けてくれないこと。 数字も文字列にしてから入れましょう。 そこだけ注意すればあとはたぶん大丈夫。

あ、あとvaluesとかitemsとかのメソッドがないからね。keysを使って適当に。