DjangoはPythonでWebアプリケーションを開発するための強力なフレームワークです。
しかし、その力を最大限に引き出すためには、設定やマイグレーションの仕組みを理解する必要があります。
この記事では、Djangoプロジェクトでのデータベース設定とマイグレーションに焦点を当て、その基本から応用までを解説します。
特に、settings.py
でのデータベース設定や、migrate
コマンドの使用方法、さらにはマイグレーションが正しく行われたかを確認する方法について詳しく説明します。
- データベースに関するsettings.pyの変更箇所と設定方法
- マイグレーションの実行手順
- マイグレーションに関するコマンドと機能
マイグレーションの準備
Djangoでのプロジェクトとアプリケーションの作成方法は、以下の記事で解説しています。
本記事の内容に入る前にあらかじめ作成しておいてください。
データベースに関する設定
Djangoプロジェクトを作成すると、settings.py
という設定ファイルが自動的に生成されます。このファイルはプロジェクト全体の設定を管理する場所であり、データベースの設定もここで行います。
環境設定
まず最初に環境設定に関する項目を変更します。
言語を設定するLANGUAGE_CODE
を以下のように変更します。
#LANGUAGE_CODE = "en-us"
LANGUAGE_CODE = "ja"
タイムゾーンに関するTIME_ZONE
を以下のように変更します。
#TIME_ZONE = "UTC"
TIME_ZONE = "Asia/Tokyo"
設定ファイル
新しいDjangoプロジェクトを作成すると、デフォルトでSQLiteがデータベースとして設定されています。settings.py
ファイルを開くと、以下のようなコードが見つかります。
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
ENGINE
: 使用するデータベースエンジンを指定します。SQLiteの場合は'django.db.backends.sqlite3'
となります。NAME
: データベースファイルのパスを指定します。SQLiteの場合は、通常プロジェクトのルートディレクトリにdb.sqlite3
ファイルが作成されます。
今回はSQLiteを使用するため、変更の必要はありません。
マイグレーション
マイグレーションとは、データベースのスキーマ(テーブル構造、関連性など)を変更するための仕組みです。
Djangoでは、このマイグレーションを非常に簡単に行うことができます。具体的には、モデル(models.py
ファイル)で定義したクラスの変更を、データベースに反映させる作業を指します。
migrateコマンド
migrate
コマンドは、Djangoプロジェクトで用意されているマイグレーションファイルを元に、データベースのスキーマ(テーブル構造など)を作成または更新します。
このコマンドはプロジェクトの初期設定や、新しいマイグレーションが追加された後に実行されます。
新しくDjangoプロジェクトを作成した場合、デフォルトでSQLiteがデータベースとして設定されています。この状態で python manage.py migrate
コマンドを実行すると、以下のような処理が行われます。
- データベースの作成: プロジェクトのルートディレクトリに
db.sqlite3
という名前のSQLiteデータベースファイルが作成されます(既に存在する場合はそのまま)。 - 組み込みアプリのマイグレーション: Djangoにはデフォルトでいくつかの組み込みアプリ(
auth
、admin
、sessions
など)があり、それぞれにマイグレーションファイルが用意されています。migrate
コマンドによって、これらのマイグレーションが適用されます。 - テーブルの作成: 上記のマイグレーションによって、ユーザー認証や管理画面、セッション管理などに必要なテーブルがデータベースに作成されます。
コマンドの実行
ターミナルまたはコマンドプロンプトを開き、Djangoプロジェクトのルートディレクトリに移動して以下のコマンドを実行します。
python manage.py migrate
実行後、指定されたデータベース(デフォルトでは db.sqlite3
)に各種テーブルが作成されます。
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
September 01, 2023 - 15:32:17
Django version 4.2.3, using settings 'django_test.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[01/Sep/2023 15:32:24] "GET / HTTP/1.1" 200 10821
PS (プロジェクトファイルのディレクトリ)\django_test> 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 admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
以上のように表示されたら、マイグレーションが完了です。
マイグレーション結果の確認
ここからは、マイグレーション結果の確認手順と、確認に使用するコマンドの機能について解説します。
マイグレーション結果の確認手順
マイグレーション結果の確認手順については以下を実行してください。
コマンドラインでプロジェクトディレクトリに移動
まず、ターミナル(またはコマンドプロンプト)を開き、Djangoプロジェクトのルートディレクトリに移動します。
cd [プロジェクトのディレクトリ]
SQLite CLIの起動
次に、以下のコマンドを実行してSQLiteのコマンドラインインターフェース(CLI)を起動します。
sqlite3 db.sqlite3
コマンドを実行するとSQLiteのバージョンが表示され、CLIが使用可能になります。
SQLite version 3.41.2 2023-03-22 11:56:21
Enter ".help" for usage hints.
テーブル一覧の確認
SQLite CLIが起動したら、.tables
コマンドを実行してデータベース内のテーブル一覧を表示します。
sqlite> .table
正常にマイグレーションが実行されていると、以下のようにテーブル一覧が表示されます。
sqlite> .table
auth_group auth_user_user_permissions
auth_group_permissions django_admin_log
auth_permission django_content_type
auth_user django_migrations
auth_user_groups django_session
このコマンドによって表示されるテーブル名の一覧から、マイグレーションによって期待通りのテーブルが作成されているか確認できます。
特定のテーブルのスキーマを確認
.schema [テーブル名]
このコマンドで、テーブルのカラム名、データ型、主キーや外部キーなどの制約が表示されます。
SQLite CLIの終了
確認が終わったら、.quit
コマンドを実行してSQLite CLIを終了します。
.quit
sqlite3 db.sqlite3
コマンド
以下は、sqlite3 db.sqlite3
コマンドを実行した後に可能な一連の操作です。
# テーブル一覧を表示
.tables
# usersテーブルのスキーマを表示
.schema users
# usersテーブルから全てのデータを選択
SELECT * FROM users;
# CLIを終了
.quit
まとめ
Djangoでのデータベース設定とマイグレーションは、Webアプリケーション開発の基礎となる要素です。
この記事を通じて、settings.py
のデータベース設定の重要性と、マイグレーションの基本的なコマンド、そしてマイグレーション後の確認方法について学びました。
これらの知識があれば、Djangoでの開発がよりスムーズに、そして効率的に進められますので、ぜひ実践で活用してみてください。
コメント