ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

Djangoでsyncdb時にデータを挿入する

Djangoでモデルを作っていると、例えば性別などのデフォルトデータを挿入したいことがある。管理パネルを使えば簡単にデータを追加できるのだが、初期開発時にはデータベースを作りなおすことが多々あるので、初期化の度に手動でデータを挿入するのは少々手間になる。

そして、性別のような単純なデータであればいいのだが、都道府県のように数の多いものや、もっと複雑なデータは手動で入力するのは現実的ではない。


ということでDjangoにはfixtureというデータベースにデータを挿入する機構が用意されている。


fixtureにてデータを挿入するのは簡単で、fixture自体も簡単に記述が行える。記述方法は「モデルに初期データを与える」を読んでいただけばわかるかと思うが、注意点としては翻訳が間違っているということ。

YAMLでfixtureを書く場合の拡張子は「.yml」ではなく「.yaml」になる。拡張子が間違っていると読み込まれないので注意。


そして、「manage.py syncdb」時にfixutreを自動的に実行するには、各アプリケーションディレクトリに「fixtures」というディレクトリを用意しておき、その中に初期化に使いたいfixtureを「initial_data.yaml」として用意しておく。YAMLでなくてもXMLでもJSONでもfixtureは記述できるが、例えばYAMLで記述する場合YAMLモジュールがインストールされていなければいけないので注意が必要になる。

例えばUbuntuでは以下でYAMLパッケージのインストールを行える。

$ sudo apt-get install python3-yaml


そしてファイルを用意している状態でsyncdbをすると、

Installed 4 object(s) from 1 fixture(s)

のような感じで自動的にfixtureを実行しデータの取り込みを行ってくれる。これは便利だ。

初めてのPython 第3版

初めてのPython 第3版

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

エキスパートPythonプログラミング

エキスパートPythonプログラミング