[Python]DjangoでMySQLを使う方法、ハマったことまとめ
=====================
2019年8月4月追記
現在、Django2.2系のバージョンアップに伴い当記事で紹介しているpymysqlよりも公式推奨のmysqlclientの使用をオススメします。
一応、メモとして当記事はそのまま残しておきます。
詳しくはこちらの記事で紹介されています。
=====================
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を使って説明します。
具体的には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
ここまでの手順で問題なくデータベースが作成できると思います。