PythonMania

普段はロボットとAIを組み合わせて色々作ってます。Python関係以外も色々投稿していくと思います。

【Django】DjangoでMySQLを使ってみる

f:id:mizuhiki0111:20190430175940p:plain



Djangoには標準でSQLliteというデータベースが搭載されていて、migrateすればすぐに使うことができます。


ですが本格的なアプリ開発の場合、SQLliteではなく「MySQL」や「Oracle Database」といったものを使用するケースが多いと思います。



今回はMySQLをインストールし、Djangoのデータベースとして設定するところまでやってみたいと思います。




環境
Windows10 64bit
Anaconda3
Django2.1
python3.7




①MySQLのダウンロード・インストール


公式サイトからMySQL(Windows用)のインストーラをダウンロードしてきます。

公式サイト
dev.mysql.com




ダウンロードしてきたらインストーラを起動し、画面の表示に従って進めていきます。


基本的にNext・Executeで進めていけばOKですがいくつか注意点があるので記載しておきます。



①「One or more product reqquirements have not been satisfied」が出た場合

僕の場合、上記エラーが出て「Pythonがインストールされてないから公式サイトからダウンロードしてきてね」みたいな警告が出てきました。

でも実際にはAnacondaとPythonは入っているので、無視して「Yes」を押して先に進みました笑



②MySQL Serverの初期設定

インストールが完了すると、そのままサーバーの初期設定画面に進みます。

「Type and Networking」という画面が出てきたらConfig Typeなんかを選べるようになると思いますが、今回は練習用(開発用)のためそのまま(Development~)のまま次に進みます。


ポート番号の設定画面が表示されますが、デフォルトの「3306」がほかのアプリケーションで使用済の場合は変更してください。



次にアカウントの設定画面に進みます。


Accounts and Roles画面が表示されるので、rootアカウントのパスワードを設定します。


パスワードを入れたら画面下部のMySQL User Accountsの「Add User」ボタンから詳細を設定していきます。

ここでは「Username」・「password」を入力してください。





あとはNextボタンで最後まで進んでいけば完了です!



②パスの設定


インストールが完了したら、MySQLServerまでのパスを環境変数に設定します。

ぼくの場合は「"C:\Program Files\MySQL\MySQL Server 8.0\bin"」となりました。





③データベースの作成

DjangoでSQLliteを使用する際には特に意識しなかった作業ですが、MySQLを使う場合にはデータベースを事前にMySQLで作成した後にDjangoで読み込む必要があります。


コマンドプロンプト(もしくはAnaconda Prompt)を開き、以下の様に進めます。


①MySQLサービスの起動(既に起動している場合は飛ばしてOKです)

mysql> net start mysql80


②MySQLへの接続

mysql> mysql -u root -p

パスワードが求められるのでインストール時に設定したパスワードを入力してください


③データベースの作成

mysql> CREATE DATABASE testdb;

今回は"testdb"という名前のデータベースを作成します。


④テーブルの確認

mysql> USE testdb;
mysql> SHOW TABLES;

まだテーブルは作成していないので「Empty set」と表示されると思います。

これで無事にデータベースを作成することができました。

次に作成したデータベースをDjangoのプロジェクトに設定していきます。




④MySQLとDjangoの連携

まず最初にDjangoのバージョンの確認です。

今まではDjango2.2を使用してきましたが、Dango2.2でMySQLと接続しようとすると以下のようなエラーが発生します。

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.


解決策としてDjangoのバージョンを2.2→2.1に変更する必要があります。


①PyMySQLのインストール

pip install pymysql


②manage.pyの編集

import os
import sys
import pymysql  # 追記

pymysql.install_as_MySQLdb()  # 追記

if __name__ == '__main__':


③settings.pyの編集

データベースに関する設定部分を以下の様に変更します

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'データベース名',
        'USER': 'ユーザー名',
        'PASSWORD': 'パスワード',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

「データベース名」・「ユーザー名」・「パスワード」はご自身の設定に合わせて変更してください。



僕の場合は
データベース名:testdb
ユーザー名:root
となります。


これでDjangoとMySQLを連携させることができました。


migrateしてテーブルを確認してみると、Djangoで作成されたテーブルが表示されると思います。


migrate

python manage.py migrate


テーブルの確認

mysql> USE testdb;
mysql> SHOW tables;