【Django】DjangoでMySQLを利用する

DjangoでMySQLを利用するための手順の解説ページアイキャッチ

このページでは、Django で利用するデータベースを SQLite(SQLite3)から MySQL に変更するための手順について解説していきます!

Django がデフォルトで利用するデータベースは SQLite なので、そのまま Django でウェブアプリを開発した場合は SQLite のデータベースが利用されることになります。

ただ、元々 MySQL を利用していた方など、データベースとして SQLite ではなく MySQL を利用したいという方もおられると思いますので、このページで Django で利用するデータベースを SQLite から MySQL に変更するための手順を解説していきたいと思います。

動作確認は Mac で行っており、Mac 向けの解説にはなりますが、インストールすべきものや設定すべきことに関しては他の OS の方でも参考になるのではないかと思います。

MySQL を利用するために必要な手順

まずは MySQL を利用するために必要になる手順についてまとめておきます。

実現する構成

最終的に目指すのは、下の図のように、SQLite を利用して動作している Django のアプリを MySQL を利用して動作させることです。

このページで実現することをまとめた図

要は Django が利用するデータベースを SQLite のものではなく MySQL のものになるように設定して Django のアプリを動作させます。

スポンサーリンク

MySQL サーバーと MySQL クライアントが必要

で、上の図を見ていただければ分かるように SQLite の場合と比べて MySQL を利用する場合の構成はちょっと複雑です。

SQLite の場合、makemigrations の実行によって作成されるファイル db.sqlite3 がデータベースとなります。そして、このファイルを Django が SQLite を介して操作することでレコードの保存や取得を行うことになります。

それに対し、MySQL の場合は MySQL サーバーがデータベースの操作を行うことになり、Django から MySQL クライアントを介して MySQL サーバーにデータベースの操作の依頼を行うという構成になります。

この MySQL サーバーが存在するため、MySQL サーバーを起動するような手順も必要になりますし、MySQL クライアントと MySQL サーバーを接続するための設定を Django に対して行う必要もあります。

また、そもそも MySQL サーバーや MySQL クライアントが PC にインストールされていない場合は、当然これらのインストールを行う必要があります。MySQL クライアントとしては、公式で mysqlclient が推奨されているため mysqlclient をインストールするのが無難です。

データベースやテーブルの作成も必要

さらに、前述の通り SQLite の場合は makemigrations を行えばデータベース(db.sqlite3)が自動的に作成されますが、MySQL の場合は makemigrations を行ってもデータベースは作成されません。そのため別途手動でデータベースを作成する必要があります。

また、レコードを保存するためにはテーブルも作成する必要があります。ただ、テーブルに関しては SQLite の時同様、migrate を実行することで作成することができます。

まとめると、SQLite を利用して動作している Django のアプリを MySQL を利用して動作させるためには下記のような手順が必要になります。

  • MySQL サーバーのインストール
  • MySQL サーバーの起動
  • データベースの作成
  • mysqlclient のインストール
  • Django のデータベースの設定変更
  • テーブルの作成

やることを図でまとめておくと下の図のようになります。

DjangoのウェブアプリをMySQLで動作させるために必要なことをまとめた図

必要に応じてレコードのダンプとロードも実施

これらの手順を踏めば、MySQL を利用してウェブアプリを動作させることができるのですが、元々 SQLite で動作していたウェブアプリに同じ動作をさせるためには、SQLite で利用していたデータベースのレコードを MySQL のデータベースに移行することが必要になります。

レコードの移行を示す図

そのため、このページではレコードの移行についても解説していきます。このレコードの移行は下記の2つにより実現することができます。

  • レコードのダンプ
  • レコードのロード

ということで、このページではここまで挙げた下記の手順について解説をしていきます(ちょっと順番変更しています)。

最初はインストールなどの手順が必要なのでやることは多いですが、2回目以降は必要な手順が減って楽になると思います。この辺りは最後に 次回以降の MySQL の利用 で解説します。

また、レコードのダンプレコードのロード に関しては SQLite のデータベースのレコードを MySQL のデータベースに保存するための手順ですので、その保存が不要である場合や、そもそもプロジェクトの新規作成の段階から MySQL を利用するような場合は不要な手順となります。

説明が不要であったり、既にインストールされていて手順が不要な方もおられると思いますので、その場合は随時解説をスキップしながら手順を進めていっていただければと思います。

スポンサーリンク

MySQL サーバーのインストール

それでは、Django で MySQL を利用する手順について、1つ1つ解説していきたいと思います。

まず最初に MySQL サーバーをインストールしていきます。

MySQLサーバーをインストールする様子

MySQL のインストールを実行

MySQL サーバーは、MySQL そのものをインストールすることで同時にインストールされます。

また、MySQL クライアントもインストールされるのですが、Django から MySQL サーバーに接続するためには mysqlclient も必要であり、別途 mysqlclient のインストールも行う必要があります(手順は後述の mysqlclient のインストール にて解説します)。

ここでインストールされる MySQL クライアントは、ターミナルからコマンドでデータベースを作成する時などに利用します。また、MySQL クライアントがインストールされることで、MySQL クライアント関連のライブラリやスクリプトもインストールされます。これらは、mysqlclient のインストールや動作時に使用されることになります。

なので、MySQL サーバーと一緒にインストールされる MySQL クライアントも、以降の手順を進めるために必要なものになります。

さて、Mac の場合、Homebrew をインストールしていれば簡単に MySQL をインストールすることができます。下記の brew コマンドを実行するだけです。

% brew install mysql

Homebrew をまだインストールされていない方は、この際にインストールしておくことをオススメします。コマンドを実行するだけで色んなソフトウェアをインストールすることが可能です。

インストールも簡単で、下記ページに記載されているコマンドをターミナルで実行すれば良いだけです。

https://brew.sh/index_ja

インストールの確認

インストールが完了した後は、下記コマンドを実行してみてください。

% mysql --version

実行して mysql のバージョンが表示されれば MySQL のインストールが完了です!

バージョンが表示された方は次の MySQL サーバーの起動 に進んでください。

brew コマンド実行時にエラーが出ていないのに、上記コマンドを実行するとエラーが出てしまう場合、mysqlPATH が通っていない可能性が高いです。なので、次の解説に進んで PATH を通す作業を行いましょう!

スポンサーリンク

PATH を通す(必要な場合のみ)

mysqlPATH が通っていない場合、おそらく brew コマンドで  MySQL をインストールした際に、下記のようなメッセージが表示されていると思います(最後の方)。

If you need to have mysql@5.7 first in your PATH, run:
  echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc

この場合は、下側の行の '' 部分を ~/.zshrc というファイルの最後に追記して mysqlPATH を通してやる必要があります。

上記の2行目に相当するコマンドをターミナルで実行することで mysqlPATH を通すこともできますが、直接 ~/.zshrc に追記する方が無難だと思います(コマンドや追記する内容はご自身の画面に表示されているメッセージに合わせる必要があります)。

Mac での PATH の通し方については下記ページで解説していますので、詳しく知りたい方は下記ページをご参照いただければと思います。

MacでのPATHの通し方の解説ページアイキャッチMacOSX での PATH の通し方について解説

上記ページにも記述しているとおり、~/.zshrc 変更後は変更を反映するために source コマンドを実行 or ターミナルの再起動が必要になります。

mysqlPATH を通しておくことは(より正確には mysql の存在するフォルダを PATH に追加しておくこと)、以降の手順を進める上でも必要な作業になりますので、必ずここで  PATH の追加を行なっておきましょう。

MySQL サーバーの起動

次は MySQL サーバーの起動を行います。

MySQLサーバーを起動する様子

MySQL のサーバーの起動手順

MySQL サーバーは下記コマンドを実行することで起動することができます。

% mysql.server start

また、brew コマンドでインストールした場合は、下記コマンドでも MySQL サーバーの起動を行うことが可能です。

% brew services start mysql

2つのコマンドには、MySQL サーバーを起動した状態で Mac を再起動した際に自動的に MySQL サーバーが起動するかどうかの違いがあるようです。

  • mysql.server start:Mac 再起動後には MySQL サーバーが自動的に起動しない
  • brew services start mysql:Mac 再起動後に MySQL サーバーが自動的に起動する

これらの違いを理解し、あとは好みで使い分ければ良いと思います。

MySQL を利用するために必要な手順 で解説したように、MySQL の場合は MySQL サーバーがデータベースを操作することになります。そのため、データベースを扱う際には MySQL サーバーを起動しておく必要があります。この点にご注意ください。

また、以降の解説は全て MySQL サーバーが起動中であることを前提に解説していきますので、この点にも注意してください。

スポンサーリンク

MySQL サーバーの再起動や停止

上記の2つのコマンドにおいて、start の部分を restart に変更して実行すれば MySQL サーバーの再起動を行うことが可能ですし、start の部分を stop に変更して実行すれば MySQL サーバーの停止を行うことも可能です。

この辺りのコマンドも覚えておきましょう!

データベースの作成

次は、Django のウェブアプリで利用するデータベースを作成していきます。

データベースを作成する様子

MySQL を利用するために必要な手順 で解説したように、MySQL の場合は手動でデータベースを作成する必要があります。

そして、これも MySQL を利用するために必要な手順 で解説したように、MySQL の場合は MySQL クライアントから MySQL サーバーに対してデータベースの操作を依頼する必要があります。

前述の通り、MySQL をインストールすれば MySQL クライアントもインストールされることになります。その MySQL クライアントを利用するためのコマンドが下記になります。

% mysql

ですので、データベースを作成する際には上記コマンドでクライアントを起動して MySQL サーバーに接続し、それから MySQL サーバーにデータベース作成を依頼することになります。

ただ、MySQL サーバーに接続するためにはユーザー名やパスワードが必要になります(MySQL アカウントのユーザー名とパスワード)。

brew コマンドで MySQL をインストールした場合、ユーザー名 root のユーザーが用意されています。ただ、root にはパスワードが設定されていません…。まぁパスワードがなくても MySQL の利用はできるとは思いますが、セキュリティ上イマイチなので、まずは root にパスワードを設定したいと思います。

そして、その用意したパスワードを利用して root で MySQL サーバーに接続し、それからデータベースの作成を行なっていきたいと思います。

MEMO

OS やインストールの仕方によって用意されているデフォルトのユーザー名やパスワードは異なる可能性があるので注意してください

root のパスワード設定

ということで、次はユーザー root のパスワード設定を行なっていきます。

さまざまな方法でパスワードを設定することは可能なのですが、今回は下記から設定を行なっていきたいと思います。

% mysql_secure_installation

このコマンドでは root のパスワード設定だけでなく、パスワードの妥当性をチェックするコンポーネントのセットアップやパスワードのポリシーの設定等、さまざまなセキュリティに関する設定を行うことが可能です。

ひとまずここでは、ユーザー root のパスワード設定までを行なっていきたいと思います。

まず上記コマンドを実行すると、次のようなメッセージが表示されてキー入力を促されます。ここでは y を入力してください。これにより、MySQL でのパスワードのポリシー設定(何文字以上とか数字を含ませる必要があるとか)を行うことができるようになります。

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

続いて、下記のようなメッセージが表示されますので、お好みに合わせてパスワードのポリシー設定を行なってください。とりあえず今回はお試しで MySQL を利用するだけですので 0 (LOW) に設定しておきたいと思います。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

パスワードのポリシー設定を行えば、次は下記のようなメッセージが表示されてパスワードの入力が促されます。ここに、ユーザー root に設定したいパスワードを入力してください。先ほど設定したポリシーに合わせたパスワードを指定する必要があります。

Please set the password for root here.

New password: 設定したいパスワードを入力

Re-enter new password: 再度パスワードを入力

続いて下記のように入力したパスワードの強度が表示され、このパスワードで問題ないかどうかが尋ねられます。パスワードの設定をやり直ししたい方は y 以外を、入力したいパスワードで問題ない場合は y を入力してください。y を入力した場合、ユーザー root へ先ほど入力したパスワードが設定されることになります。

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

ここまでの手順でユーザー root のパスワードが設定されたことになります!

ただ、詳細な説明は省略させていただきますが、以降も画面に質問が表示され、キー入力が促されると思います。

表示される文を読んで適切にキー入力を指定するのがベストですが、とりあえずお試しで MySQL を利用したいのであれば y 以外を入力して設定をスキップするので良いです。

ひとまず下記が表示されるまで設定を進め、本番環境に移行する際など、本格的な設定が必要なった際に再度 mysql_secure_installation コマンドを実行してセキュリティ設定を行なっていただければと思います。

All done! 

スポンサーリンク

MySQL サーバーへの接続

続いて MySQL サーバーへの接続を行なっていきます。

前述の通り、MySQL クライアントを利用するためには mysql コマンドを実行することになります。そして、その際にはユーザー名とパスワードを指定する必要があります。

具体的には、ユーザー root での MySQL サーバーへの接続は、下記のコマンドを実行することで行うことができます。

% mysql -uroot -p

コマンドを実行するとパスワード入力が促されるはずですので、root のパスワード設定 で設定したパスワードを入力してエンターキーを押してください。

パスワードが合っていれば MySQL クライアントから MySQL サーバーへの接続に成功し、下記のようなメッセージが表示されるはずです。

Welcome to the MySQL monitor.  Commands end with ; or \g.
〜 略 〜
mysql>

最後の mysql> のプロンプトが表示されたことが MySQL サーバーへの接続に成功したことを表しており、以降は mysql> の後ろ側にコマンドを入力して MySQL のデータベースへの操作の依頼を行なっていくことになります。

さて、先ほど実行した接続時のコマンドにおいて、-u の後ろに指定するのは “ユーザー名” になります。つまり、上記ではユーザー名 root で MySQL サーバーに接続していることになります。

また、上記のコマンドにおける -p はパスワードを入力することを指定するためのオプションになります。これを指定しないとパスワード入力なしで接続を試みることになり、当然ユーザーにパスワードが設定されている場合は接続に失敗してしまいます。

今回は利用しませんが、その他にも mysql コマンド実行時には接続先の MySQL サーバーが存在するホストの “ホスト名” であったり、接続先の “ポート番号” を指定するようなことも可能です。例えばホスト名を適切に設定すれば、他の PC 上で動作している MySQL サーバーにも接続可能だと思います(やったことないですが…)。

これらを指定しなかった場合は、デフォルト設定のホスト名・ポート番号に基づいて MySQL サーバーへの接続が行われることになります。

これらのデフォルト設定は下記のようになります。特にデフォルトのポート番号 3306 は覚えておくと良いと思います。

  • ホスト名:localhost
  • ポート番号:3306

MySQL サーバーからの接続切断

ここでは実行する必要はありませんが、MySQL クライアントから MySQL サーバーとの接続を切断するためには下記のいずれかを実行する必要があります。

mysql> quit
mysql> exit;

後者に関しては最後の ; を忘れないようにしましょう!

また、これらのコマンドを忘れると MySQL サーバーとの接続が切断できなくて戸惑うことになるので、是非このコマンドは覚えておきましょう!

データベース作成の実行

続いて Django で利用するデータベースを作成します。

MySQL サーバーに接続済みであれば、MySQL クライアントから下記のように CREATE DATABASE を実行することでデータベースを作成することができます(接続を切断してしまった場合は、再度 MySQL サーバーへの接続 の手順で接続してください)。

mysql> CREATE DATABASE データベース名;

データベース名 は作成したいデータベースの名前に置き換えてください。また、最後の ; を入力せずにエンターキーを押すと単に改行が行われることになります。その場合は ; のみを入力してエンターキーを押してください。

上記によって作成したデータベースに Django のウェブアプリがレコードを保存したり、このデータベースからウェブアプリがレコードを取得したりすることで、ウェブアプリのさまざまな動作を実現していくことになります。

続いて下記のように SHOW databases; を実行してみてみましょう!

これは存在するデータベース一覧を表示するコマンドになります。

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| django_db          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.13 sec)

コマンド実行により表示されるデータベース一覧の中に、データベース作成時に指定した データベース名 が存在すれば、データベースの作成は完了です。

後述の Django のデータベースの設定変更 においては、データベース名 が必要になりますので、ここで作成したデータベースの データベース名 は覚えておいてください。

また、以降では Python 側の準備を行なっていくことになりますので、下記コマンドで MySQL サーバーとの接続を切断してオーケーです。

mysql> exit;

スポンサーリンク

mysqlclient のインストール

ここからは Python 側の準備をしていきます。

まず、MySQL を利用するために必要な手順 で説明したように、Django から利用する MySQL クライアントとしては mysqlclient が推奨されています。

そのため、次は mysqlclient をインストールしていきたいと思います。

mysqlclientをインストールする様子

mysqlclient は Python のモジュールの1つなので、pip を利用してインストールすることができます。

ということで下記コマンドを実行しましょう!これにより mysqlclient のインストールが行われます。

% python -m pip install mysqlclient

下記が表示されれば mysqlclient のインストールは完了です(バージョンは異なる可能性があります)。

Successfully installed mysqlclient-2.1.0

この mysqlclient は Django が利用する MySQL クライアントになります。そのため、Django がインストールされているバージョンの Python にインストールする必要があるので注意してください。

また、mysql にパスが通っていない場合、mysqlclient のインストール時にエラーが発生する or Django から mysqlclient を利用する際にエラーが発生することになるので注意してください。

レコードのダンプ

以上の設定により、Django から MySQL のデータベースを利用する準備は整ったことになります。

ここからは、Django 側の操作や Django の設定を行うことで、利用するデータベースを SQLite から MySQL に変更していきます。

まずは SQLite のデータベースに存在するレコードのダンプを行っていきます。

MySQLのデータベースからレコードをダンプする様子

レコードをダンプしておけば、このダンプしたレコードを MySQL 側のデータベースにロードさせることで、今まで SQLite で保存したレコードを MySQL でも利用できるようになります。

このレコードのダンプには、Django の dumpdata を利用します。Django には利用中のデータベースのレコードをダンプする機能が用意されており、その機能を実行するのが dumpdata になります。

ただ、ダンプしただけだとレコードが画面に表示されるだけですので、ダンプされたレコードをリダイレクトを利用してファイルに保存しておく必要があります。

具体的には、MySQL を利用したい Django プロジェクトのフォルダの中で下記コマンドを実行します。

% python manage.py dumpdata --indent=1 > dump.json

これにより、そのプロジェクトで扱っていた SQLite のデータベースのレコードがダンプされ、dump.json というファイルとして保存されることになります。

MEMO

--indent はダンプ結果にインデントを付加するためのオプションであり、dump.json をテキストとして表示した際に見やすくするために設定しています

dump.json の中身は下記のような感じになります。一番外側の {} で括られた部分が1つのレコードになっており、各フィールドに対する値などが dump.json に保存されることになります。

{
 "model": "ImageApp.comment",
 "pk": 4,
 "fields": {
  "image": 2,
  "user": 3,
  "message": "お久しぶりです!いい画像ですね!",
  "time": "01:46:46.821"
 }
},
{
 "model": "ImageApp.comment",
 "pk": 5,
 "fields": {
  "image": 4,
  "user": 1,
  "message": "今度一緒に写真撮りにいきましょう!",
  "time": "01:48:43.355"
 }
},

この dump.json は後述の レコードのロードで利用します。

あくまでも dumpdata でダンプできるレコードは Django が利用中のデータベースからのものになります。

現状 Django が利用中なのは SQLite のデータベースのはずなので、上記コマンドでは SQLite のデータベースからレコードがダンプされることになります。

以降で Django を MySQL のデータベースを利用するように設定するため、設定後に dumpdata を実行した場合は MySQL のデータベースのレコードがダンプされるようになります。

なので、SQLite のデータベースからレコードをダンプするためには、Django の利用するデータベースの設定を変更する前に dumpdata を行う必要があります(まぁ設定を元に戻せば再度 SQLite のデータベースからレコードをダンプできるようになりますが…)。

Django のデータベースの設定変更

次はいよいよ Django の設定を変更し、Django の利用するデータベースを SQLite から MySQL に変更していきます。

Djangoの設定を変更してMySQLを利用するようになる様子

スポンサーリンク

settings.py の変更で DB の設定を実施

まず、Django の利用するデータベースの設定は、MySQL を利用したいプロジェクトの settings.py を変更することで行うことになります。

この settings.py において、データベースの設定が行われているのは下記部分になります。

データベースの設定
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

上記では、一行目の 'ENGINE'SQLite3 を利用すること、さらに二行目の 'NAME' でデータベースの名前の指定を行なっていることになります。

SQLite の場合はファイル db.sqlite3 としてプロジェクトフォルダ直下にデータベースが存在するので、'NAME' にはそのファイルのパスが設定されているということになります。

で、あくまでも上記は SQLite のデータベースを利用するための設定であり、ここの設定を変更して MySQL のデータベースを利用するようにしていく必要があります。

具体的には、MySQL を利用する際は上記を次の形式の記述に変更します。

MySQL利用時の設定
DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'データベース名',
        'USER': 'ユーザー名',
        'PASSWORD': 'パスワード',
        'HOST': 'ホスト名',
        'PORT': 'ポート番号',
    }
}

各設定項目の意味

MySQL の場合、MySQL サーバーへの接続のためのが必要になるので SQLite に比べると設定項目がちょっと複雑になります。

ただ、ここまでの手順の解説の中で 'ENGINE' 以外の設定項目に指定すべきものは説明してきたつもりです。なので、何を指定すれば良いかは迷わないのではないのかと思います。

念の為、各項目に指定すべきことを下記に示しますので、自身が作成したデータベースや MySQL 接続時のパスワードに合わせて settings.py の変更を行なっていただければと思います。

'ENGINE'

MySQL を利用する場合は、'ENGINE' には 'django.db.backends.mysql' を指定します。

'NAME'

'NAME' には Django のウェブアプリで使用したいデータベース名を指定します。

具体的には、データベース作成の実行 でデータベース作成時に実行した下記コマンドの データベース名 を指定します。

mysql> CREATE DATABASE データベース名;

'USER'

'USER' には MySQL サーバーに接続する際に使用するユーザー名を指定します。

より具体的には、MySQL サーバーへの接続mysql コマンド実行時に指定したユーザー名を指定します(root

'PASSWORD'

'PASSWORD' には、'USER' に指定したユーザー名のユーザーのパスワードを設定します。

より具体的には、MySQL サーバーへの接続mysql コマンド実行時に指定したパスワードを指定します。

'HOST'

'HOST' には MySQL サーバーが起動しているホスト(PC やサーバーなど)のホスト名を指定します。今回は Django が動作する PC 上で MySQL サーバーが起動していることを想定しているため、'localhost' を指定するので良いです。

'PORT'

'PORT' には MySQL サーバーが接続を待ち受けているポートの番号を指定します。

MySQL サーバーのポート番号の設定を変更していないのであれば、MySQL サーバーへの接続 で紹介したデフォルトのポート番号 '3306' を指定してください。

デフォルト設定の部分を埋めれば、settings.pyDATABASES は下記のように変更することになります。データベース名パスワード はご自身の設定に応じて置き換えてください。

MySQLへの接続設定
DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'データベース名',
        'USER': 'root',
        'PASSWORD': 'パスワード',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

テーブルの作成

続いて、settings.py の 'NAME' に指定したデータベースに migrate でテーブル作成を行なっていきます。

データベースにテーブルを作成する様子

このテーブル作成には2つの目的があります。

1つ目は Django のウェブアプリからデータベースへのレコードの保存等を行えるようにするためです。MySQL の場合でもレコードの保存先となるテーブルが必要なので、ここでテーブルの作成を行います。

2つ目は、先程の settings.py の設定が正しいかどうかを確かめることです。

'ENGINE' に 'django.db.backends.mysql' を指定しているので、データベースへの操作を行う際には MySQL サーバーへの接続が行われます。migrate でテーブルを作成する際ももちろん接続が行われます。

なので、settings.py の設定が正しくない場合、テーブル作成時にエラーが発生することになります。

逆にテーブル作成ができれば settings.py の設定は正しいと言えると思います。

ということでデータベースにテーブルを作成していきたいと思います。テーブルの作成は SQLite の時同様にプロジェクトフォルダの中で下記コマンドを実行することで作成できます(一応 makemigrations も行っています)。

% python manage.py makemigrations
% python manage.py migrate

OK などのメッセージが出てエラーが出ることなくコマンドが終了すればテーブル作成成功です!

もし、下記のようなエラーが出た場合は settings.py の設定や MySQL サーバーの起動の確認を行なってみてください。

  • MySQL サーバーが起動していない?
    • django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
  • 'USER' or 'PASSWORD' の設定がおかしい?
    • django.db.utils.OperationalError: (1045, "Access denied for user 'rot'@'localhost' (using password: YES)")
  • 'NAME' の設定がおかしい?
    • django.db.utils.OperationalError: (1049, "Unknown database 'djago_db'")
  • 'HOST' の設定がおかしい?
    • django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'loclhost' (8)")
  • mysqlclient のインストールが上手くできていない?
    • NameError: name '_mysql' is not defined

スポンサーリンク

レコードのロード

テーブルが作成できたのであれば、ここまでの手順によってウェブアプリから MySQL のデータベースが利用できるようになったことになります。

ただ、まだテーブルは空ですので、レコードのダンプdump.json にダンプしておいた SQLite のデータベースのレコードを MySQL のデータベースに移行しておきましょう!

SQLiteのデータベースからダンプしたレコードをMySQLのデータベースにロードさせる様子

Django には loaddata が用意されており、これにより dump.json のような dumpdata でダンプして保存したファイルの中身をレコードとして利用中のデータベースに保存することができます。

具体的には、下記により dump.json の中身をレコードとして利用中のデータベースに保存することができます。

% python manage.py loaddata dump.json

下記のようなメッセージが表示されればレコードの保存の成功です!

Installed 56 object(s) from 1 fixture(s)

あくまでも dump.json は SQLite のデータベースのテーブルからダンプしたレコードです。そのため、MySQL のデーターベースに “SQLite のデータベースにあったテーブル” が存在しないと上記コマンドが上手く動作しない可能性があります(文字エンコードの設定を変更している場合はそこも合わせる必要があるかも)。

ですので、dumpdata 実行時から loaddata 実行までは models.py は変更しないことをオススメします。

MEMO

models.py の作り等によっては loaddata で失敗することもあるようです

その場合は下記のページなどが参考になるかもしれないです(私は単純な models.py でしか試してないので今のところ失敗したことはありません)

以上の設定により、SQLite を利用して動作していたウェブアプリが MySQL を利用して動作するようになったはずです。

しかも、SQLite を利用していたときに保存したレコードが MySQL のデータベースに反映されているはずです。

なので、SQLite を利用していた時と同様にウェブアプリを動作させることができると思います。ぜひいつも通りウェブアプリを動作させ、データベースを MySQL に切り替えた後にも今まで通りの動作が実現できていることを確認してみてください。

次回以降の MySQL の利用

最初の MySQL 利用の際は手順が多くて大変でしたが、次回以降はスキップできる手順が多くなるので楽になると思います。

具体的には、次回以降で必要になる手順は下記のみとなります。

レコードのダンプとレコードのロードに関しては、プロジェクト新規作成の時点から MySQL を利用する場合は不要になります。

settings.py の変更も使いまわせる部分が多いですので、一度 MySQL の利用手順を踏んでおけば、次回以降は MySQL を利用する際の負荷はそんなにないんじゃないかなぁと思います。

また、今回はユーザー root を利用することを前提に設定を行なってきましたが、必要に応じてユーザーの追加なども行うと良いと思います。

まとめ

このページでは、Django で利用するデータベースを SQLite から MySQL に変更するための手順について解説しました!

SQLite の場合は Python をインストールするだけで利用可能ですが、MySQL の場合は別途 MySQL サーバーや MySQL クライアントのインストールが必要になりますし、MySQL サーバーに接続するための設定等が必要になるので若干手順が複雑になります。

ただ、一度手順を踏んでしまえば以降で MySQL サーバーを利用する際の手順は少なくなりますし、手順に慣れることもできますので一度は手順を試してみてください!

同じカテゴリのページ一覧を表示

コメントを残す

メールアドレスが公開されることはありません。