QDBMというのは、KeyとValueの組を保存しておくデータベースです。 ま、GDBMやTDBやBerkelay DBやなんかの親戚です。 ベンチマークのレポート(PDF)を見ると結構速いので、なかなか魅力的かな、と。
ということで、PYTHONで使ってみたいな、と思ったのですが、付属のものはrubyやperlだけで、pythonの物はありませんでした。
ネットでも探してのですが、ライブラリになっている物は見つけられなかったので、何となく作ってみました。
SWIGで作ってもよかったのですが、getで取得したメモリを解放してくれなかったり(きっと使い方を分かっていないだけ・・・)でなんとなく気に入らなかったのと、PYTHONの元からあるdictやgdbmと同じように使えるとうれしいかな、といことで、dictとgdbmを参考にしながら(パチくりながら?!)ゴリゴリ作ってみました。
とりあえず、Depotだけですが。
怪しげなところがあったら教えてください。
https://pypi.python.org/pypi/pyqdbm/0.9.6
必要に応じて、setup.cfgを編集後インストール実行。
python setup.py install
基本的にopenはdbm風、その他はdictionary風です。
from qdbm import depot db = depot.open("test.db", "n") # depot.open(ファイル名, フラグ, バケット配列の要素数の目安) db["apple"] = "red" # key, valueで登録 db["lemon"] = "black" db["orange"] = "orange" db["lemon"] = "yellow" # 上書き登録 print db["lemon"] # keyがlemonのvalueを取得 print db.get("orange", "unknown") # default付きで取得 print db.get("melon", "unknown") # default付きで取得 print db.keys() # keyの一覧を取得 for k in db.iterkeys(): # keyのiteratorでぐるぐるまわす print k for k, v in db.iteritems(): # (key, value)のiteratorでぐるぐるまわす print k, v for v in db.itervalues(): # valueのiteratorでぐるぐるまわす print v db.close() # 行儀よく終了
depot.open(ファイル名, [フラグ, [バケット配列の要素数の目安]])
フラグの意味は以下の通りです。
省略した場合は"r"です。
フラグ | 意味 | depotの対応するモード |
---|---|---|
r | 読み取り専用 | DP_OREADER |
w | 読み書き | DP_OWRITER |
c | 読み書き (無ければ作成) |
DP_OWRITER | DP_OCREAT | DP_OSPARSE |
n | 読み書き (常に新規作成) |
DP_OWRITER | DP_OCREAT | DP_OSPARSE | DP_OTRUNC |
HOME |