Django MySQL 設定 DB migration 方法

今回は、DjangoのMySQLの接続設定と、

Django標準のmanage.pyを利用して、

DB(MySQL)をマイグレーションする方法をメモしておこうと思います。

 

尚、Djangoのプロジェクトは、以下のメモの要領で作成済みの前提で行います。

Djangoプロジェクト作成 PyCharm

 

環境・モジュール

  • Python version:3.8.1
  • Django version:3.0.3
  • pip:20.1.1
  • mysqlclient:2.0.1
  • PyCharm 2019.3.3 (Community Edition)
    Runtime version: 11.0.5+10-b520.38 x86_64

Django DB設定

DjangoのDB接続設定は、settings.pyで行います。

デフォルトだとSqlite用の設定になっていると思いますので、

MySQL用の内容に修正します。

Django document MySQL notes

settings.py 設定内容

修正箇所は、Djangoプロジェクト名/settings.pyファイルのDATABASESの部分です。

DBの接続情報を元にそれぞれ設定します。

設定項目

  • ENGINE:django.db.backends.mysql
  • NAME:DB名
  • USER:DBユーザー名
  • PASSWORD:ユーザーパスワード
  • HOST:ホスト名
  • PORT:ポート名
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'Django_test_02',
    'USER': 'root',
    'PASSWORD': 'root',
    'HOST': '127.0.0.1',
    'PORT': '8889',
  }
}

※Workbenchで接続情報を確認するときには、以下のような形でよく確認します。

 


DB(MySQL) マイグレーション実行

以下のメモは、Djangoの管理画面用のDBテーブル整備を、

Djangoのマイグレーション機能を利用して行う内容になっています。

マイグレーションファイル作成

通常であれば、作成するDBテーブルに対応したモデルを作成してから、

マイグレーションファイルを作成しますが、

今回は、管理画面用のテーブルだけ作成したいので、モデルは一切作成せずに、以下のコマンドを実行します。

python manage.py makemigrations

※python2とpython3が共存している場合は、python3と指定します。

マイグレーション実行

以下のコマンドでマイグレーションを実行します。

python manage.py migrate

マイグレーションを実行後に、DBを確認するとテーブルが作成されています。

 


マイグレーション トラブルシュート

マイグレーション時に、以下の様なエラーメッセージが表示された場合、

pythonコマンドのバージョン指定が間違っているか、

mysqlclientなどのツールが不足している可能性があります。

Did you install mysqlclient?

パッケージ不足対応

pipを利用してインストールします。

pip install パッケージ名

※pipのバージョンが混在している場合は、pip3など指定して実行する必要があります。

基本的には、エラーメッセージで表示されたパッケージをインストールすれば解決します。

インストールされているパッケージ一覧を確認したい場合には、以下のコマンドで確認できます。

pip list


mysqlclient インストールエラー

mysqlclientインストール時に、上記の対応を行なってもエラーとなる場合に遭遇しましたので、追記させて頂きます。

Collecting mysqlclient
Using cached mysqlclient-2.2.1.tar.gz (89 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [24 lines of output]
Trying pkg-config --exists mysqlclient
Command 'pkg-config --exists mysqlclient' returned non-zero exit status 1.
Trying pkg-config --exists mariadb
Command 'pkg-config --exists mariadb' returned non-zero exit status 1.
Trying pkg-config --exists libmariadb
Command 'pkg-config --exists libmariadb' returned non-zero exit status 1.
Traceback (most recent call last):
File "/Users/30_practice/practice_python/django_ninja/env/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/Users/30_practice/practice_python/django_ninja/env/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
File "/Users/30_practice/practice_python/django_ninja/env/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
File "/private/var/folders/pn/4cbj64797yv5mhqvlmjpxcd40000gn/T/pip-build-env-ik3qhigk/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 325, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=['wheel'])
File "/private/var/folders/pn/4cbj64797yv5mhqvlmjpxcd40000gn/T/pip-build-env-ik3qhigk/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires
self.run_setup()
File "/private/var/folders/pn/4cbj64797yv5mhqvlmjpxcd40000gn/T/pip-build-env-ik3qhigk/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 311, in run_setup
exec(code, locals())
File "<string>", line 155, in <module>
File "<string>", line 49, in get_config_posix
File "<string>", line 28, in find_package_name
Exception: Can not find valid pkg-config name.
Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

こちらのエラーであれば、以下の公式の情報通りに対応すれば解消されます。

https://pypi.org/project/mysqlclient/

以下は、公式の説明の引用となります。

MySQLも同時にインストールする場合は、

以下のように前提パッケージをインストールしてからmysqlclientをインストールします。

$ # Assume you are activating Python 3 venv
$ brew install mysql pkg-config
$ pip install mysqlclient

MySQL自体はDockerなどで動かすため不要な場合、

以下の様に前提パッケージをインストールします。

$ # Assume you are activating Python 3 venv
$ brew install mysql-client pkg-config
$ export PKG_CONFIG_PATH="$(brew --prefix)/opt/mysql-client/lib/pkgconfig"
$ pip install mysqlclient

 

今回のメモは以上となります。

初めてマイグレーションを行う際には、トラブルなどが起きやすいと思いますので、

逐一メモしておきたいと思います。

 

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 163

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る