/note/tech

Python データベース マスタ Enum

DBに何かしらのコードが管理されていて、プログラムからもそれを扱いたいというニーズはよくある。

例えば都道府県コード的なもの。

[{code:'01', name:'北海道'},{code:'02', name:'青森'},,,,]

このようなコードをDBで管理している理由は、(1)テーブル間で参照制約を持たせる為、(2)コードが追加/変化する可能性がある為である。

したがって、(1)の理由だけならともかく、(2)の理由もある場合、プログラムコードに静的にコードを定義することはDBとの乖離を生じるリスクがある。

そこで、DBのデータを元にEnumを作りたくなる。

Pythonでは↓みたいな感じでEnumを動的に生成できる。

prefecture = Enum('Prefecture', (('北海道', '01'), ('青森', '02'),,,,))
print(prefecture.北海道)  # '01'

もっともこれではコード上に静的にキーと値のペアを定義できるEnumの良さをスポイルしているのではないかという懸念はあり、それは実際一理あるので、採用する場合は深く検討する必要がある。