本記事ではDjangoにデフォルトで設定されているSQLiteをMysqlに変えるときの設定について確認する。
プロジェクト名:ex2
アプリ名:apl2
目次
- 1.本稿の開発環境
- 2 Djangoプロジェクトの作成
- 3 Djangoアプリを作成
- 4 プロジェクトの初期設定
- 5 データベースの設定
- 6 PyMySQL(Python製のMySQLクライアント)のインストール
- 7 manage.pyの編集
- 8 マイグレーション
1.本稿の開発環境
(1)ホストOS
Windows 10 Pro
(2)仮想環境(VirtualBox)
・ゲストOS:CentOs8(Red Hat 64-bit)
・pythonバージョン
Python 3.6.8
・MySQL Serverのバージョン
# mysqld –version
/usr/libexec/mysqld Ver 8.0.26 for Linux on x86_64
(Source distribution)
・MySQL Clientのバージョン
# mysql –version
mysql Ver 8.0.26 for Linux on x86_64
(Source distribution)
・Djangoのインストール
# python3 -m pip install Django
# python3 -m django –version
3.2.7
仮想環境の作成については下記のページを参照
VirtualBoxにCentOS8の環境作成
2 Djangoプロジェクトの作成
# django-admin startproject ex2
3 Djangoアプリを作成
プロジェクトのフォルダで下記コマンドを実行
# python3 manage.py startapp apl2
4 プロジェクトの初期設定
プロジェクトのsettings.pyファイルで次の2つを編集
・INSTALLED_APPS変数
・TEMPLATES変数のDIRS
(1)INSTALLED_APPS変数にアプリケーションを登録
’apl2.apps.Apl1Config’を登録
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apl2.apps.Apl2Config',
(2)テンプレートフォルダの指定
HTMLテンプレートファイルを格納するフォルダを作成して登録する。ここではmanage.pyと同じディレクトリtemplatesフォルダを作成する。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR/'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
5 データベースの設定
プロジェクト名/settings.pyを編集
mysqlを使うため、下記の内容に書き換える
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ex2db',
'USER': 'root',
'PASSWORD': ' ',
'HOST': '',
'PORT': '',
}
}
6 PyMySQL(Python製のMySQLクライアント)のインストール
・pymysql
# pip3 install pymysql
・インストール済みのパッケージ一覧の確認
# pip3 freeze -l
7 manage.pyの編集
下記の2行を追加
・import pymysql
・pymysql.install_as_MySQLdb()
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import pymysql #add
pymysql.install_as_MySQLdb() #add
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ex2.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
(注)pymysqlについて
「本番環境」でもMySQLが使えるようにするためにはwsgi.pyの編集が必要。
wsgi.pyに下記を追加
8 マイグレーション
データベースは予め作成しておく
mysql> CREATE DATABASE ex2db;
また、Mysqlサーバを起動しておく
# service mysqld start
(1)マイグレーションを実行
# python3 manage.py migrate
migrateコマンドではINSTALLED_APPSの設定を参照して、ex2/settings.pyファイルのデータベース設定に従って必要なすべてのデータベースのテーブルを作成する
(2)マイグレーションにより作成されたテーブルの確認
# mysql -u root -p
Enter password:
mysql> SHOW databases;
mysql> USE ex2db;
mysql> SHOW tables;
The end