LoginSignup
4
8

More than 5 years have passed since last update.

Django事始め: 4_MySQL連携

Last updated at Posted at 2017-03-13

目次

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 に接続

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8