概要
Djangoを使ってもくもく会をすることになったので、Windows上に開発環境を整えました。
Django公式チュートリアルではSQLiteで進めていますが、MySQLを使ってみたかったので導入してみました。Windowsで環境を作ってる人はあまり見かけなかったので参考になれば幸いです。
環境
- Windows 10 Pro
- Anaconda 5.3
- Python 3.7
- Django 2.1
- XAMPP 7.2.12
- MariaDB 10.1.37
- MySQLバージョンとの互換はよくわからない
手順
XAMPPインストールは割愛します🙋
MySQL用ドライバをインストールする
公式ページ記載の通り、MySQLと連携するにはドライバが必要なようです。mysqlclient
以外にもPython用のドライバはあるみたいですが、公式に記載のあるものを使います。
ドライバダウンロード
こちらから自身の環境に合ったドライバをダウンロードします。cpXX
の部分はPythonバージョンに対応しています。私の環境ではmysqlclient‑1.3.13‑cp37‑cp37m‑win_amd64.whl
を使いました。
- マシンはSurface Laptopなのでamdプロセッサを使ってない気がするけど、これじゃないと動かなかった😐
ドライバインストール
Anaconda Promptを起動し、ダウンロードディレクトリに移動してからpip installします。インストール前にDjango環境をactivateします。
ここでは、Djangoがインストールされている環境をdjango
としています。
(base) C:\Users\hoge>activate django
(django) C:\Users\hoge>cd Downloads
(django) C:\Users\hoge\Downloads>pip install mysqlclient-1.3.13-cp37-cp37m-win_amd64.whl
Processing c:\users\hoge\downloads\mysqlclient-1.3.13-cp37-cp37m-win_amd64.whl
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.13
(django) C:\Users\hoge\Downloads>
MySQL(MariaDB)側で必要な設定をする
XAMPPを起動して、MySQLサーバもStartしておきます。その後、XAMPPコンソール右側のShell
ボタンを押してXAMPPプロンプトを起動します。
ユーザの作成
DjangoからDBに接続するためのユーザを作ります。面倒なのでフルコントロールを与えます。
$ mysql -u root -p
MariaDB [(none)]> CREATE USER djangouser IDENTIFIED BY 'password';
MariaDB [(none)]> grant all on *.* to djangouser@localhost identified by 'password';
データベースの作成
適当にデータベースを作っておきます。
MariaDB [(none)]> CREATE DATABASE polls;
Django側で接続設定を行う
プロジェクトを作成する
既に作ってあれば飛ばします。作ってなければ以下で作ります。
(django) C:\Users\hoge>django-admin startproject mysite
接続設定を追記する
プロジェクト直下のmanage.py
を以下のように編集します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'polls',
'USER': 'djangouser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
マイグレーションする
manage.py
が保存されているディレクトリに移動した後マイグレーションを実行します。
(django) C:\Users\hoge\project\mysite>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 sessions.0001_initial... OK
(django) C:\Users\hoge\work_django\project\mysite>
DB側を確認する
空のデータベースに以下のテーブルが作成されていれば成功!🙆
MariaDB [mysql]> use polls;
Database changed
MariaDB [polls]> show tables;
+----------------------------+
| Tables_in_polls |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
10 rows in set (0.00 sec)
MariaDB [polls]>