エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
普段はフリーランスでシステムエンジニアをしております。
今回は、Python初心者向けにDjango開発でデータベースをSQLite3(デフォルト)からMySQLに変更して連携する方法をまとめてみました。
なお、本記事内のPythonソースコードは、Visual Studio Code (VSCode)で動作を確認しているので、同様に動作確認したい方はこちらの記事を参照してください。
MySQLの環境構築(MAMP)
MySQLを扱うためにこちらの記事に従って、MySQL(MAMP)の環境構築を行ってください。
MySQLの環境構築ができたら、MAMPを起動し、下図の赤枠のように緑色でApache ServerとMySQL Serverの二つが正常起動していることを確認してください。
仮想環境の準備
Django+MySQLで開発するためのPython仮想環境を準備していきます。
仮想環境(venv)の作成
venvで仮想環境を作成するためには、以下のコマンドを実行します。
1 |
python -m venv venv |
最後に指定した「venv」という名前の仮想環境を作成しています。
仮想環境の名前は任意で大丈夫ですが、ここでは「venv」という名前を前提に解説します。
仮想環境(venv)の有効化
先ほど作成した仮想環境「venv」を有効にするには、以下のコマンドを実行します。
1 |
.\venv\Scripts\activate |
下図のようにターミナルの行頭が「(venv)」で始まっていれば、仮想環境を有効化できています。
Djangoインストール
仮想環境「venv」にDjangoをインストールするには、以下のpipコマンドを実行します。
1 |
pip install django |
mysqlclientインストール
PythonでMySQLを扱うためにmysqlclientをインストールする必要があります。
仮想環境「venv」にmysqlclientをインストールするには、以下のpipコマンドを実行します。
1 |
pip install mysqlclient |
最後に「pip freeze」コマンドでDjangoとmysqlclientがインストールされているか確認しておきましょう。
Djangoの準備
仮想環境が準備できたところで、次はDjangoプロジェクト作成から順に準備をしていきます。
Djangoプロジェクトの作成(startproject)
Djangoプロジェクトを作成するには、以下のstartprojectコマンドを実行します。
1 |
django-admin startproject project . |
コマンドを実行すると、下図のように「Djangoプロジェクト名」のフォルダが作成されて、いくつかファイルが生成されます。
Djangoアプリの作成(startapp)
Djangoアプリを作成するためには、以下のstartappコマンドを実行します。
1 |
python manage.py startapp app |
コマンドを実行すると、下図のように「Djangoアプリ名」のフォルダが作成されて、いくつかファイルが生成されます。
settings.pyのDATABASES変数を編集
Djangoプロジェクト内のsettings.pyのDATABASES変数を以下のように編集し、DjangoにMySQLデータベースの設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysql_testdb', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } } |
ここでは、MySQLのデータベース名を「mysql_testdb」という名前に設定し、USERとPASSWORDはデフォルトのままにしています。
データベース名は任意の名前で構いません。
また、USER、PASSWORDも必要に応じて変更してください。
MySQLデータベースの作成
先程settings.pyのDATABASES変数のNAMEに設定した「mysql_testdb」という名前のデータベースを作成します。
MySQLのデータベースを作成するためには、下記コードのように「mysql -u root -p」コマンドを実行し、パスワードを入力してMySQLにログインします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
(venv) PS C:\Users\Gemini\Desktop\virtual\django-mysql> mysql -u root -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 115 Server version: 5.7.24 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database mysql_testdb; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mysql_testdb | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) |
正常にログインができたら、「create database mysql_testdb;」コマンドを実行し、データベースを作成します。
そして、正しくデータベースが作成されたか「show databases;」コマンドで確認してください。
データベース一覧に「mysql_testdb」が表示されていたら、正しく作成されているので、「quit」コマンドでMySQLからログアウトしておきましょう。
Djangoでデータベースマイグレーション
Djangoの準備とMySQLデータベースの準備ができたら、いよいよDjangoでデータベースマイグレーションを行います。
makemigrationsコマンド
Djangoでマイグレーションを行うためには、まず下記の「makemigrations」コマンドを実行します。
1 |
python manage.py makemigrations |
Djangoアプリ内のmodels.pyに独自モデルを作成していないため、このコマンドでは「No changes detected」とメッセージ表示されるだけになります。
migrateコマンド
Djangoでマイグレーションを行うためには、もう一つ下記の「migrate」コマンドを実行します。
1 |
python manage.py migrate |
コマンドを実行すると、Djangoがデフォルトで提供してくれているauth認証やadminダッシュボード用のデータベーステーブルが生成されます。
MySQLWorkbenchでマイグレーション結果確認
MySQL Workbenchを起動し、先程のmigrateコマンドで「mysql_testdb」データベースにテーブルが作成されているか確認しましょう。
MySQL Workbenchを起動し、下図の赤枠で示すボタンを押し、MySQL Workbenchへのコネクションを作成しましょう。
下記のダイアログが表示されるので、コネクション名を入力し、それ以外はデフォルトのまま「OK」を押しましょう。
コネクション名はここでは「test」としています。
ここでパスワードを聞かれますが、デフォルトの「root」を入力すると接続ができます。
その後、ウィンドウに作成したコネクションが表示されるので、ダブルクリックすると、MySQL Workbenchが起動します。
MySQL WorkbenchのSchemasウィンドウに「mysql_testdb」が表示されていることを確認し、下図のようにmigrateコマンドで作成されたauth認証やadminダッシュボード用のテーブルがTable欄に作成されていれば連携は正しく行われています。
これ以降にDjangoアプリ内のmodels.pyに独自モデルを作成した後、データベースマイグレーションすると、「mysql_testdb」データベースの中にテーブルが追加されていきます。
独自モデルを作成してmigrateコマンドを実行すると、デフォルトであれば「<Djangoアプリ名>_<Djangoモデル名>」という名前のテーブルが追加されます。
まとめ
いかがでしたでしょうか。
DjangoのデータベースをSQLite3からMySQLに変更して連携する方法を解説してきました。
デフォルトのデータベースであるSQLite3も使えますが、MySQLの方がより現場で使われているため、この機会にDjango初心者の方はおさえておくとよいでしょう。
【関連記事】
【Python Django入門】使い方からWebアプリ作成までの流れ
【Python Flask入門】使い方の基礎からWebアプリケーション作成までの流れ
【Python Flask入門】データベースと連携したWebアプリケーション作成