Edited at

Django事始め: 4_MySQL連携

More than 1 year has passed since last update.


目次

Django事始め: 1_環境構築

Django事始め: 2_プロジェクト作成

Django事始め: 3_Apache連携

Django事始め: 4_MySQL連携

前回はApacheと連携してDjangoでつくったプロジェクトを外部に公開する準備ができました。

まだまだ実際のプログラムは書かずに環境構築を続けます。

今回はDB設定を変更します。

DjangoはデフォルトでSQLiteを使用します。

非常に手軽にプロジェクトを始められる(設定要らず)メリットがある一方、

後々MySQLに移行するとなると今以上の手間がかかります。

辛いことは最初にやってしまいましょう。

Djangoのデータベースをsqlite3からMySQLに移行したときにハマったこと

特に僕はテキスト解析関連をやる予定なので、大量のデータを扱うのにSQLiteは向いていない、とどこかで読んだので設定を変更することにしました。

あとMySQLは慣れ親しんでいたので。

SQLiteとMySQLの違いについてピンとくる記事が見つけられなかったので、もし良い記事や書籍があれば紹介頂けたら幸いです。

軽くですが、こちらに違いが書いています。

レンタルサーバーで使えるデータベース管理システム一覧


環境


  • CentOS 7.1

  • Apache 2.4.6

  • pyenv 1.0.7

  • anaconda 3-4.3.0

  • Django 1.10.5

  • MariaDB 5.5.52

*CentOS組み込みのMariaDBを使っています。

MariaDBはMySQLの派生として生まれました。

5.5まではMySQLとあまり変わりないとのことで、こちらを使っています。

長年の議論に終止符 -- MySQLとMariaDBの違い一覧


MariaDBインストール

yum install mariadb mariadb-server mariadb-devel


設定ファイル編集

mysqlの設定ファイルを開きます。

日本語を扱う場合は文字コードを指定しましょう。

vi /etc/my.cnf

[mysqld]の下に以下追記

character-set-server = utf8

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

加えて以下まるまる追記

[client]

default-character-set = utf8

設定を反映するため再起動しましょう。

systemctl start mariadb

systemctl enable mariadb


初期設定

いろいろ聞かれるので答えていきます。

mysql_secure_installation

Enter current password for root (enter for none): # 初期設定はブランク。そのままエンターを押せば良いです
Set root password? [Y/n] y
New password: # 任意のパスワード
Re-enter new password:: # パスワード確認

以降の質問は全て「y」でOKです。

パスワード付きでmysqlを実行します。

$ mysql -u root -p

Enter password: # 先ほど設定したパスワードを入力します
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 789
Server version: 5.5.47-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ではDjango用にデータベースを作成します。

MariaDB [(none)]> create database xxx;

MariaDB [(none)]> exit;

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

あとは、このDBをDjangoに認識させます。


Django設定

設定ファイルを開きます。

vi settings.py

DATABASES = {

'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx', # 先ほど作成したDB名
'USER': 'root', # mysqlのユーザ名(セキュリティ的にはrootはNGです。適宜変更しましょう)
'PASSWORD': 'pass', # mysqlのパスワード
'HOST': '', # ホストIP
'PORT': '', # ポート
}
}

...

TIME_ZONE = 'Asia/Tokyo'

HOSTとPORTはローカルホストのDBでデフォルトのポートを使用しているなら空で問題ありません。


モジュールを追加する

pip install PyMySQL

*python2ではpython-mysqlが使われていたが、3非対応らしいです。

manage.pyに追加したモジュールを使うよう指示します。

vi manage.py 

import pymysql

pymysql.install_as_MySQLdb()

マイグレーションを作成して実行してみましょう。

python manage.py makemigrations

python manage.py migrate


参考

Python3 + Django で MySQL に接続