こんにちは。今回のテーマは「初期データの投入」です。データベースに予めデータを入れておきたいケースは珍しくないと思います。今回はカテゴリ情報の初期データを投入してみます。 ※本ページはデータベースのマイグレーションまで読まれた方を対象としています。そのためサンプルソースコードが省略されている場合があります。
Djangoにおける初期データの投入
データを予め投入しておきたいということは様々な場面であると思います。Djangoではマイクレーションで投入する方法とフィクスチャーを使う場合の2通りがあります。詳細は公式ドキュメント-モデルに対する初期データを投入するを参照して下さい。 今回はフィクスチャを使った初期データの投入をしていきます。
fixturesファイルの準備
フィクスチャを使ったデータ投入にはfixturesファイルを作り、それを読み込む作業によって行います。fixturesファイルはJSON,YAML,XMLの形式で書くことが出来ます。今回はJSONで書いてみます。
thread/fixtures/thread/category_data.json
[
{
"model" : "thread.category",
"pk" : 1,
"fields" : {
"name" : "WEB技術",
"url_code" : "web_app",
"sort" : 1
}
},
{
"model" : "thread.category",
"pk" : 2,
"fields" : {
"name" : "モバイル",
"url_code" : "mobile",
"sort" : 2
}
},
{
"model" : "thread.category",
"pk" : 3,
"fields" : {
"name" : "プログラミング",
"url_code" : "programing",
"sort" : 3
}
},
{
"model" : "thread.category",
"pk" : 4,
"fields" : {
"name" : "OS関連・インフラ",
"url_code" : "os",
"sort" : 4
}
},
{
"model" : "thread.category",
"pk" : 5,
"fields" : {
"name" : "業界ネタ・憩いの場",
"url_code" : "chatter",
"sort" : 5
}
}
]
YAML等でのも同様の構造であれば問題ありません。
データの投入
それでは早速投入していきましょう。Djangoがfixturesファイルを探すのはデフォルトでは各アプリケーションのfixturesフォルダです。以下のようなコマンドでロードします。
(venv)$ ./manage.py loaddata thread/category_data.json
これでデータが投入されました。データベースに入り確認してみましょう。DjangoにはCUIでデータベースにアクセスする便利機能が用意されています。ちょっと使ってみましょう。
.(venv)$ /manage.py dbshell
これでMariaDBやPostgresqlの種類に関わらずデータベースにアクセスできます。では先程インサートしたデータを確認しましょう。
[forum_data] select * from thread_category;
[出力結果]
+----+-----------------------------+------------+------+
| id | name | url_code | sort |
+----+-----------------------------+------------+------+
| 1 | WEB技術 | web_app | 1 |
| 2 | モバイル | mobile | 2 |
| 3 | プログラミング | programing | 3 |
| 4 | OS関連・インフラ | os | 4 |
| 5 | 業界ネタ・憩いの場 | chatter | 5 |
+----+-----------------------------+------------+------+
最後に
投入したデータに変更を加えて再度loaddataを行うとデータが初期化されてしまうので注意が必要です。次回は管理画面について紹介していきます。
Sponsored Link