目次
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