Python DBM

Python学習【365日チャレンジ!】144日目のマスターU(@Udemy11)です。

SQLiteはデータベースをファイルにして扱うデータベースなので、MySQLのようにローカルホストを必要とせず、Pythonistaでも簡単に使うことができました。

今回学習するDBMも簡易なファイルを作成して扱うデータベースなので、Pythonistaでコードを書いてみることにしました。

昨日の復習

昨日、一昨日と、SQLステートメントを自動で実行してSQLiteやMySQLなどを扱うことができるSQLAlchemyを学習しました。

オブジェクトを生成してオブジェクトがデータベースの操作をするという感じのオブジェクト指向のプログラミングでしたが、コードを1行書き換えるだけで、SQLiteやMySQLなどのデータベースを切り替えて扱うことができました。

まずはメモリーで動作確認をしたほうがいいとのことでしたが、汎用性の高い使い方ができました。

SQLAlchemyの詳細はこちらの記事をごらんください。

今日は、DBMについて学習しましょう!

DBMとは

Python公式ドキュメントによると、DBM(DataBase Management)は【Unix”データベース”へのインタフェース】とあり、UNIXやLinuxで以前から使われています。

テーブルでデータを格納するのではなく、keyvalueを使う辞書型データで格納します。

DBMは、リレーショナルデータベースに比べると拡張性は低いものの、key検索が高速にできるので、SQLiteやMySQLを使うまでもない簡単なデータを扱うのに適しています。

それでは実際にDBMをさわっていきましょう。

ファイルのように扱う

DBMはPythonの標準ライブラリに含まれているので、新たにインストールする必要はなく、インポートして使うことができます。

また、テキストファイルを開いて使うように、withステートメントで扱うことができます。

それではコードを書いていきましょう。

import dbm


with dbm.open('cache', 'c') as db:
    db['id1'] = 'Mark'
    db['id2'] = 'Kate'

with dbm.open('cache', 'r') as db:
    for i, n in db.items():
        print(i, n)

出力結果

b'id1' b'Mark'
b'id2' b'Kate'

Pythonistaだとこのコードでもエラーが発生せずに、保存されているkeyvalueが表示されました。

一方、このコードをPycharmで実行してみると、dbがイテラブルオブジェクトではないというタイプエラーが起こりました。

Python DBM

原因はよくわからないのですが、Pycharmではforループで回して使うことはできないようです。

保存されるファイルの違い?

DBMを使ってPycharmでデータベースを作成したときは、cache.dbというファイルが生成されます。

Python DBM

一方、Pythonistaの場合は、下記のような3つのファイルが生成されます。

Python DBM

もしかしたら、このことが関係しているのかもしれませんが、ネットで原因を探しても答えを見つけることはできませんでした。

数字は扱えない

ちなみにDBMでは数字(integer)を扱うことはできません。

これはPythonistaでもPycharmでも同じようにエラーが返されます。

Python DBM

Python DBM

id3に数字の3を入れようとしてエラーが返されています。

使いみちは?

文字列しか扱えないので、どんな使いみちがあるのかよくわかりませんが、酒井さんの講座では、キャッシュとして簡易なデータを一時保存しておく場合などに使うと解説されていました。

Udemy講師 酒井さん プログラミング Python

とはいえ、そのデータに数字が含まれていれば使うことができないので、実際に活用している場面に出くわさないときちんと理解することは難しいかと思います。

今日は、他のリレーショナルデータベースとは少し違った使い方をするDBMについて学習しましたが、また新しいことに気づいた時に追加情報を加えたいと思います。

それでは、明日もGood Python!