0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】loaddataコマンドを使用してfixturesデータをデータベースにロード(初期データを投入)する方法

Last updated at Posted at 2023-04-06

概要

  • Djangoでは、python manage.py loaddataコマンドを使用してfixturesデータをデータベースにロードできます。
  • これは初期データ投入時に使えます。今回は実際にやってみたので、本記事ではその方法を解説します。

実行手順

  • fixturesディレクトリ内のJSONファイルを作成します。

    • JSONであれば、ファイル名は必ず.json拡張子で終わる必要がありますが、JSONのほか、XMLやYAML形式でも書くことができます。
    • フィクスチャ (fixture) とは、 テストや開発のためのサンプルデータを含むファイルです。Django のデータベースに投入できるよう準備済みのデータの集まりのことです。Djangoでは、フィクスチャを使用してアプリケーションの初期状態を構築することができます。アプリケーションの開発やテストに欠かせない便利なツールです。
  • 今回は、事前にマイグレーションはしてある前提とします。

  • python manage.py loaddataコマンドを使用して、fixturesデータをデータベースにロードします。例えば、以下のように実行します。

$ python manage.py loaddata sample_data.json
Installed 10 object(s) from 1 fixture(s)
  • sample_data.jsonの前にfixutresのパスを明示的に書いても良いですが、Djangoがloaddataコマンドを実行する際に、アプリケーションのフィクスチャディレクトリを自動的に検索します。
  • 実行後に、正常にロードされていれば、Installed...と表示されます。
  • 複数のjsonファイルがあれば、スペースで連続させることもできます。
$ python manage.py loaddata hoge_data.json foo_data.json

Django管理画面からの確認方法

  • アプリ側で確認できるよう実装されていればそこから確認してもOKですし、DBクライアントソフトから確認するでもOKですが、djangoでは管理画面からロードされたデータを表示することができます。
    • Djangoの管理画面とは:Webブラウザを使用してデータベースの内容を閲覧・編集するためのユーザーインターフェース
  • Djangoのプロジェクトにアクセスし、管理画面にログインします。URLはadminをつけてあげればアクセスできます。
  • admin画面で見る場合、models.pyadmin.pyには以下のような記載が必要です。
models.py
from django.db import models

class Movie(models.Model):
    title = models.CharField(max_length=100)
    director = models.CharField(max_length=100)
    released_date = models.DateField()

    def __str__(self):
        return self.title
admin.py
from django.contrib import admin
from .models import Movie

admin.site.register(Movie)
  • admin画面にアクセスすると、以下のように表示されているはずです。

image.png

  • モデルの管理ページで、特定のレコードを表示するには、レコードをクリックします。これにより、レコードの詳細ページが表示されます。
  • と言うことで簡単に初期データをロードできるのがいいですよね。fixturesディレクトリには、アプリケーションの初期状態を表すフィクスチャが含まれていて初期状態を再現するために使用されると覚えておくと、今後も利用することが多そうです。
  • Djangoでいうフィクスチャは、Ruby on Railsでいう「seedデータ(seeds.rb)と似ていますね。
  • loaddataと逆で、DBに格納されているデータをダンプしておくコマンドdumpdataもあります。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?