PythonのdbmパッケージでUNIXデータベースを操作する方法
dbmパッケージとは
Pythonの標準ライブラリに含まれるdbmパッケージは、DBM形式のデータベースに対して辞書(dict)のようなインターフェースを提供します。dbmライブラリはKen Thompsonによって開発されたシンプルなデータベースエンジンで、DBMは「DataBase Manager」の略称です。UNIXオペレーティングシステムで広く使われており、固定サイズのバケットに単一のキー(主キー)を用いて任意のデータを格納し、ハッシュ技術によってキーからの高速なデータ検索を実現しています。
dbmパッケージの主なモジュール
dbm.ndbm
dbm.ndbmモジュールは、UNIXの「(n)dbm」ライブラリへのインターフェースを提供します。dbmオブジェクトは辞書のように振る舞いますが、キーと値はバイト型(bytes)として保存する必要があります。なお、このモジュールではitems()やvalues()といったメソッドはサポートされていません。
dbm.dumb
dbm.dumbモジュールは、完全にPythonのみで実装された永続的な辞書風インターフェースを提供します。dbm.gnuなどの他のモジュールと異なり、外部ライブラリを一切必要としないのが特徴です。他の永続マッピングと同様に、キーと値は常にバイト型として保存されます。
shelveモジュールとの関係とwhichdb()関数
これらのモジュールは、Pythonのshelveモジュールによって内部的に利用されています。shelveデータベースの場合と同様に、ユーザーが指定したデータベース名には「.dir」という接尾辞が付与されます。また、dbmオブジェクトのwhichdb()関数を使うと、現在のPython環境でどのdbm実装が利用可能かを確認できます。
>>> dbm.whichdb('mydbm.db')
'dbm.dumb'
データベースの作成とデータの保存
open()関数にモード「'n'」を指定すると、常に新しい空のデータベースが作成されます。以下はデータを登録する例です。キーと値にはバイト文字列を渡す点に注意してください。
>>> db = dbm.open('mydbm.db', 'n')
>>> db[b'name'] = b'Rajani Deshmukh'
>>> db[b'address'] = b'Shivajinagar Pune'
>>> db[b'PIN'] = b'431001'
>>> db.close()
open()関数で指定できるモードフラグ
| 値 | 意味 |
|---|---|
| 'r' | 既存のデータベースを読み取り専用で開く(デフォルト) |
| 'w' | 既存のデータベースを読み書き両用で開く |
| 'c' | 読み書き用にデータベースを開く。存在しない場合は新規作成する |
| 'n' | 常に新しい空のデータベースを作成し、読み書き用に開く |
辞書のようにデータを操作する
dbmオブジェクトは、shelfオブジェクトと同様に辞書風のオブジェクトです。そのため、基本的な辞書操作の多くを行うことができ、get()、pop()、update()などのメソッドも呼び出せます。ただし、items()やvalues()が使えるかどうかは、背後で動作している実装(ndbm、dumb、gnuなど)によって異なる点に注意しましょう。
次のコードは、「mydbm.db」を'r'フラグで開き、キーと値のペアを順番に取り出して表示する例です。
>>> db = dbm.open('mydbm.db', 'r')
>>> for k, v in db.items():
... print(k, v)
b'name' b'Rajani Deshmukh'
b'address' b'Shivajinagar Pune'
b'PIN' b'431001'
dbmオブジェクトの主なメソッド
sync():ディスク上のディレクトリファイルとデータファイルを同期します。このメソッドは、Shelve.sync()メソッドから内部的に呼び出されます。
close():dbmデータベースを閉じます。
GNU dbmオブジェクト固有のメソッド
firstkey()
このメソッドとnextkey()メソッドを組み合わせることで、データベース内のすべてのキーを順番にループ処理できます。firstkey()は走査の起点となる最初のキーを返します。
gdbm.nextkey(key)
走査の順序において、指定したkeyの直後に位置するキーを返します。
gdbm.reorganize()
この関数はデータベースを再編成(リオーガナイズ)します。GNU dbmオブジェクトは、この再編成を実行しない限りデータベースファイルのサイズを縮小しません。再編成を行わない場合、削除された分のディスク領域はそのまま保持され、新しく(key, value)ペアが追加されるときに再利用されます。
-
オブジェクト指向データベースとは?基本概念と特徴をわかりやすく解説
オブジェクト指向データベースとはオブジェクト指向データベース(OODB:Object-Oriented Database)とは、オブジェクト指向プログラミングの考え方とリレーショナルデータベースの技術を組み合わせたデータベースです。C++やJavaなどのオブジェクト指向言語で作成されたさまざまなデータは、従来のリレーショナルデータベースにも保存できますが、こうしたオブジェクト形式のデータを管理するには、オブジェクト指向データベースの方がはるかに適しています。オブジェクト中心のデータ管理という考え方オブジェクト指向データベースの最大の特徴は、「処理(アクション)」ではなく「オブジェクト」を軸にデ
-
クラウドデータベースとは?仕組みと導入メリットをわかりやすく解説
現代のIT環境において、データは仮想化された環境、いわゆる「クラウド」上に保存されるのが一般的になっています。クラウドの形態には、パブリッククラウド、プライベートクラウド、そして両者を組み合わせたハイブリッドクラウドがあります。 クラウドデータベースの定義 クラウドデータベースとは、こうした仮想化環境向けに最適化され、あるいは当初からクラウド上で運用されることを前提として構築されたデータベースのことです。従来のように自社サーバー(オンプレミス)に物理的なインフラを用意する必要がなく、インターネット経由でアクセスして利用できる点が大きな特徴です。 クラウドデータベースの主なメリット クラウドデー