Django ORMのデータベース作成入門
マイグレーションの基本
DjangoのORMを使ったデータベース作成とマイグレーションの仕組みを解説します。
こんな人向けの記事です
- Djangoでデータベースを作成したい人
- マイグレーションの仕組みを理解したい人
- データベース設定の変更方法を知りたい人
Step 1デフォルトのデータベース
Djangoプロジェクトの新規作成時、デフォルトではSQLite3が使用されます。SQLite3はファイルベースのデータベースで、追加のインストールが不要なため、開発用途に最適です。
settings.pyのデフォルト設定は以下の通りです。
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
この設定により、プロジェクト直下にdb.sqlite3というデータベースファイルが作成されます。
Step 2マイグレーションの実行
Djangoでデータベースのテーブルを作成するには、マイグレーションを実行します。初回は以下のコマンドを順番に実行します。
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
このコマンドを実行すると、Djangoが標準で持っている認証やセッションなどのテーブルが自動的に作成されます。
ポイント: migrateコマンドはまだ適用されていないマイグレーションファイルをすべて実行します。どのマイグレーションが適用済みかはデータベース内で管理されています。
Step 3データベース設定の変更
本格的な開発やチーム開発では、PostgreSQLやMySQLなどのデータベースに切り替えることが一般的です。
PostgreSQLの設定例:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "myapp_db",
"USER": "myuser",
"PASSWORD": "mypassword",
"HOST": "localhost",
"PORT": "5432",
}
}
MySQLの設定例:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "myapp_db",
"USER": "myuser",
"PASSWORD": "mypassword",
"HOST": "localhost",
"PORT": "3306",
}
}
注意: PostgreSQLを使用する場合はpsycopg2、MySQLの場合はmysqlclientパッケージのインストールが必要です。pip install psycopg2-binaryなどで事前にインストールしてください。
Step 4データベース管理コマンド一覧
Djangoにはデータベース管理のための便利なコマンドが用意されています。
# マイグレーションファイルを作成
python manage.py makemigrations
# マイグレーションを実行してテーブルを作成・更新
python manage.py migrate
# マイグレーション状態を確認
python manage.py showmigrations
# マイグレーションで実行されるSQLを確認
python manage.py sqlmigrate アプリ名 マイグレーション番号
# データベースをリセット(全データ削除)
python manage.py flush
| コマンド | 説明 |
|---|---|
| makemigrations | モデルの変更からマイグレーションファイルを生成 |
| migrate | 未適用のマイグレーションを実行 |
| showmigrations | マイグレーションの適用状況を一覧表示 |
| sqlmigrate | マイグレーションで実行されるSQLを表示 |
| flush | データベースの全データを削除(テーブル構造は残る) |
Step 5本番環境での注意点
本番環境では、以下の点に注意してください。
- SQLite3は同時アクセスに弱いため、PostgreSQLやMySQLを使用する
- データベースのパスワードなどの機密情報は環境変数で管理する
flushコマンドは全データを削除するため、本番環境では使用しない
import os
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.environ.get("DB_NAME"),
"USER": os.environ.get("DB_USER"),
"PASSWORD": os.environ.get("DB_PASSWORD"),
"HOST": os.environ.get("DB_HOST", "localhost"),
"PORT": os.environ.get("DB_PORT", "5432"),
}
}
ポイント: 環境変数の管理にはpython-decoupleやdjango-environパッケージを使うと便利です。.envファイルに設定値を記述し、Gitには含めないようにしましょう。
まとめ
- Djangoはデフォルトでsettings.pyにSQLite3のデータベース設定が記述されている
python manage.py migrateでマイグレーションを実行してテーブルを作成する- PostgreSQLやMySQLへの切り替えはsettings.pyの
DATABASES設定を変更する makemigrationsとmigrateの2ステップでデータベースを更新する- 本番環境では機密情報を環境変数で管理し、SQLite3以外のDBを使用する