Python
PostgreSQL
Python3
Database
ER図

PythonでER図をリバースエンジニアリングで作成してみる

ER図の作成は今まではEclipseのプラグインやA5に頼っていたのですが、ERAlchemyというpipライブラリを使うとコマンドラインで完結できるようです。
https://pypi.python.org/pypi/ERAlchemy

結論から言うと生成されるER図は完璧なものではなさそうなので、何となく雰囲気を見たいというようなレベルの時に利用するのがいいかなと思います。

環境

  • Ubuntu: 16.04
  • Python: 3.6.2
  • pip: 9.0.1
  • PostgreSQL: 9.6.5

インストール

※ psycopg2等は開発段階で使っているため前提になってしまっています

まずは必要と書かれているGraphViz周りをインストールします。

$ sudo apt-get install graphviz libgraphviz-dev

Ubuntuではeralchemy実行時にエラーになってしまったので、適切にパスを通しておく必要があるみたいです。
https://github.com/pygraphviz/pygraphviz/issues/71#issuecomment-138999823 を参考)

$ pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"

ちなみに発生したエラーは以下のような感じです。
発生してしまってからは一旦uninstallして上記のinstallコマンドを流しました。

ImportError: .../site-packages/pygraphviz/_graphviz.cpython-36m-x86_64-linux-gnu.so: undefined symbol: Agundirected

そしてERAlchemyをインストールします。

$ pip install eralchemy

現時点では1.1.0がインストールされました。

ER図の作成

以下のコマンドでER図がPDFで出力されます。

$ eralchemy -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -o out.pdf

拡張子のところをpngに変えれば画像で出力されますし、erにするとMarkdown形式のテキストで出力されます。

出力されたER図を見ると「0..N」の場所とか合ってるんだろうかという感じがしますが、ER図にそこまで詳しいわけではないので実は正しいのかよくわかりません。
とりあえずオプションも気にせず動かしてみたという状態なので、今後必要に応じてオプションとか調査していきたいなと思います。

できたものを他のER図のツールにインポートしていじくりまわせると便利なんですけどねぇ。