JUNのブログ

JUNのブログ

活動記録や技術メモ

MySQLとDjangoをつなげる手順

この記事はそもそもMySQLすらダウンロードしてない人向けです。

Djangoのプロジェクト自体は作成済みを想定しています。

環境

  • OS: LinuxMint 18.3
  • Django == 2.0.6

各種インストール

MySQLをインストール

$ sudo apt-get install mysql-server

インストール途中にパスワードを設定するように求められるので設定してください。

DjangoMySQLをつなげるPyMySQLをインストール

現時点で(2018/06)デフォルトでインストールされる PyMySQL==0.7.9 は致命的なバグが含まれているためこちらではバージョンを指定してインストール。
バグについてはこちら

$ pip install PyMySQL==0.8.0

MySQL周りの設定

日本語(UTF-8)

文字化け対策です。

$ sudo vim /etc/mysql/my.cnf  # MySQLの設定ファイルを変更する

以下を書き加える

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

MySQLを再起動する

$ sudo /etc/init.d/mysql restart

ログイン

$ mysql -u root -p

データベースの作成

mysql > create database test_db;

ユーザーの追加

ユーザー名:testuser パスワード:password ホスト名:localhost

mysql > create user `testuser`@`localhost` IDENTIFIED BY 'password';

ユーザーにデータベースの操作権限を付与

対象:testuser@localhost 対象のパスワード:password 操作できるDB名:test_db

mysql > grant all privileges on test_db.* to testuser@localhost IDENTIFIED BY 'password';

ログアウト

mysql > \n

これでMySQL側の設定は完了です。

Django側の設定

settings.pyを編集する

settings.pyの DATABASE の部分を書き換える

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_db', # DB名を設定
        'USER': 'testuser', # DBへ接続するユーザIDを設定
        'PASSWORD': 'password', # DBへ接続するユーザIDのパスワードを設定
        'HOST': 'localhost',
        'PORT': '',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
        'TEST': {
            'NAME': 'test_sample'
        }
    }
}

PyMySQLを使えるようにする

manage.pyにこれを書き加えてください。

import pymysql
pymysql.install_as_MySQLdb()

書き加える場所はどこでもいいと思います。私は import の下に書き加えてます。

終わり

これで

$ python manage.py makemigrations
$ python manage.py migrate

とすれば終わり!!

参考リンク

codelab.website

qiita.com

qiita.com