最終投稿日:2022年6月18日
Django(DB接続)
MySQL に接続する
● PyMySQLのインストール
Python3系では MySQL の接続に「PyMySQL」を使用します
以下を叩いてインストールします
pip install PyMySQL
(pip install PyMySQL==0.7.9 ※バージョンを指定する場合)
インストール後は以下を叩いて確認する
pip freeze
Django==2.0.1
PyMySQL==0.8.0
pytz==2017.2
等が確認できる。。
以下を叩いてインストールします
pip install PyMySQL
(pip install PyMySQL==0.7.9 ※バージョンを指定する場合)
インストール後は以下を叩いて確認する
pip freeze
Django==2.0.1
PyMySQL==0.8.0
pytz==2017.2
等が確認できる。。
● manage.py の設定
import pymysql
pymysql.install_as_MySQLdb() ※import 文のすぐ下に記述する
pymysql.install_as_MySQLdb() ※import 文のすぐ下に記述する
● settings.py の設定
DATABASES を編集します。
例)
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'HOGE_DB', # DB名
'USER' : 'root', # DBへアクセスするユーザー名
'PASSWORD' : '', # DBへアクセスするパスワード
'HOST' : 'localhost', # DBサーバ
'PORT' : '3306', # DBのポート番号
'OPTIONS' : {
# MySQL5.6以上の制約で動作させる
'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST' : {
'NAME' : 'test_HOGE_DB' #テスト用のDBがあれば追記
}
}
}
例)
[ 変更前 ]
DATABASES = {'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
[変更後]
DATABASES = {'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'HOGE_DB', # DB名
'USER' : 'root', # DBへアクセスするユーザー名
'PASSWORD' : '', # DBへアクセスするパスワード
'HOST' : 'localhost', # DBサーバ
'PORT' : '3306', # DBのポート番号
'OPTIONS' : {
# MySQL5.6以上の制約で動作させる
'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST' : {
'NAME' : 'test_HOGE_DB' #テスト用のDBがあれば追記
}
}
}
● DBの登録
実際に以下の様に MySQL にて HOGE_DB を登録する。
例)
mysql -u root
CREATE DATABASE HOGE_DB CHARACTER SET utf8;
例)
mysql -u root
CREATE DATABASE HOGE_DB CHARACTER SET utf8;
● 実際にマイグレーションを実行して Django と MySQL が接続できているか確認します
python manage.py migrate ※manage.py の階層から叩く
以下の様な内容が表示されればOKです!
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
MySQL のテーブルに以下が作成されていれば成功です!
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
MariaDB [hoge_db]> show tables;
+----------------------------+
| Tables_in_hoge_db |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
+----------------------------+
| Tables_in_hoge_db |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
● 本番環境でもMySQLが使えるようにする
今までの手順を行うことで、runserver の環境であれば MySQL を問題なく利用することができます。
ただ、runserver の環境はあくまで「開発環境」であり、本番運用の環境ではありません。
「本番環境」でも MySQL が使えるようにするためには wsgi.py の編集が必要になります。
[ROOT/root/wsgi.py]
import pymysql
pymysql.install_as_MySQLdb()
ただ、runserver の環境はあくまで「開発環境」であり、本番運用の環境ではありません。
「本番環境」でも MySQL が使えるようにするためには wsgi.py の編集が必要になります。
[ROOT/root/wsgi.py]
import pymysql
pymysql.install_as_MySQLdb()
PostgreSQL に接続する
● psycopg2 のインストール
以下を叩いてインストールします
pip install psycopg2 インストール後は以下を叩いて確認する
pip freeze
psycopg2==2.7.4 がいればインストールされている
pip install psycopg2 インストール後は以下を叩いて確認する
pip freeze
psycopg2==2.7.4 がいればインストールされている
● manage.py の設定
特になし。。
● settings.py の設定
DATABASES を編集します。
例)
例)
[ 変更前 ]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
[変更後]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db', # DB名 ※大文字・小文字を認識するので注意!!
'USER' : 'hoge', # DBへアクセスするユーザー名
'PASSWORD' : 'xxxxxxxx', # DBへアクセスするパスワード
'HOST' : 'localhost', # DBサーバ
'PORT' : '5432', # DBのポート番号
'TEST' : {
'NAME' : 'test_HOGE_DB' #テスト用のDBがあれば追記
}
}
}
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db', # DB名 ※大文字・小文字を認識するので注意!!
'USER' : 'hoge', # DBへアクセスするユーザー名
'PASSWORD' : 'xxxxxxxx', # DBへアクセスするパスワード
'HOST' : 'localhost', # DBサーバ
'PORT' : '5432', # DBのポート番号
'TEST' : {
'NAME' : 'test_HOGE_DB' #テスト用のDBがあれば追記
}
}
}
● 実際にマイグレーションを実行して Django と PostgreSQL が接続できているか確認します
python manage.py migrate ※manage.py の階層から叩く
MySQL と同様に新規テーブルが10個作成されればOK!
MySQL と同様に新規テーブルが10個作成されればOK!




