[Python]DjangoでMySQLを使う方法、ハマったことまとめ

django

=====================

2019年8月4月追記

現在、Django2.2系のバージョンアップに伴い当記事で紹介しているpymysqlよりも公式推奨のmysqlclientの使用をオススメします。

一応、メモとして当記事はそのまま残しておきます。

詳しくはこちらの記事で紹介されています。

Django: エラー解決法 “raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; 〜) django.core.exceptions.ImproperlyConfigured: 〜”

=====================

DjangoのデフォルトのデータベースはSQLiteですが、MySQLに変更することもできます。

settings.pyから変更するわけですが、それ以外にも色々とすることがあるので備忘録を兼ねてメモ。

MySQLを用意する(Mac環境)

DjangoのデータベースはデフォルトではSQLiteが設定されています。

これをsettings.pyからMySQLが使えるように変更します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'root',
        'PASSWORD': '',
    }
}

ここではNAME、USER、PASSWORDは任意のものでもいいのですが、注意するのがローカルで設定しているユーザーやパスワードを設定すること。

話しが前後しますが、今回はMac環境で行なっています。

そして、MySQLがMacのローカル環境にインストールされているのが前提となります。

もし、MySQLをダウンロードしていないのあれば下記の記事から設定してください。

Mac へ MySQL を Homebrew でインストールする手順

 

今回、筆者はMacにMySQLをインストールしていたのですが久しぶりに触るとなぜかMySQLが起動しませんでした。

あれこれネット記事を拾いましたが、最終的にはDB削除→MySQLアンインストール→MySQL再インストールがうまく行きました。

とは言っても、ローカルのデータベースをいったんリセットすることになるので、ここら辺は慎重に検討した方がいいと思います。最終手段ですね。

 

テストプロジェクト作成

DjangoでMySQLを使うための確認用としてテストプロジェクトを用意します。

Djangoは公式のチュートリアルが用意されているので、その中でおすすめなDjangoGirlsを使って説明します。

DjangoGirlsのチュートリアル

具体的にはDjangoプロジェクトを作成して、migrateする一歩手前まで進めます。

プロジェクトを作成すると、様々なファイルが生成されます。

その中で2つのファイルを変更します。

 

[変更①]

settings.pyという設定ファイルを変更してMySQLを導入します。

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 変更
        'NAME': 'mysite', # 変更
        'USER': 'root', # パソコンにインストールしたMySQLのユーザー名
        'PASSWORD': '', # 同上。そのパスワード
    }
}

DATABASEの箇所はデフォルトではSQLiteが記述されていますが、ここを MySQLに変更します。

NAMEはこれから作るローカルのMySQLのデータベースと同じ名前にすればいいので、何でもOK。今回はmysiteとしました。

注意したいのが、USERとPASSWORD。後でMacのターミナルからデーターベースをローカルに構築しますが、その時のMySQL上のユーザー名、パスワードを一緒にしましょうねってことです。

MySQLをインストールすると自動でrootというスーパーユーザーが作成されていますが、今回はそちらにしました。

 

[変更②]

もう一つ変更するファイルはmanage.pyです。

下記に掲載しますので追加分を確認してください。

#!/usr/bin/env python
import os
import sys
import pymysql # 追加
pymysql.install_as_MySQLdb() # 追加

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    try:
        from django.core.management import execute_from_command_line
    # 中略

 

 

ターミナルからMySQLを操作する

冒頭でMySQLのインストールを説明しましたが、すでにパソコンにインストールされている前提で話しを進めます。

Macのターミナルを開いてMySQLへログインします。今回はrootユーザーでログイン。

$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.12 Homebrew

 

CREATE DATABASE [データベース名]; ←セミコロン でデータベースが作成されます。

mysql> CREATE DATABASE mysite;
Query OK, 1 row affected (0.08 sec)

 

ちゃんと作成されたか確認してみましょう。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysite             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

ありました。

あとは、ログアウトしてOKです。

mysql> exit
Bye

 

migrate実行

ここからもターミナル上の操作となります。前後しましたが、pymysqlもインストールしておきましょう。

$ pip install PyMySQL

 

migrateでDjangoでデータベースを構築します。

$ python manage.py migrate

ここまでの手順で問題なくデータベースが作成できると思います。



カテゴリー