概要
前回作ったチュートリアルアプリは SQLite で動作していました
今回は MySQL に切り替えてみたいと思います
環境
- macOS 11.7.10
- Python 3.11.6
- Django 5.0.1
- MySQL 8.1.0
データベース作成
- create database django_test;
settings.py
の編集
ドライバは PyMySQL を使います
公式おすすは mysqlclient のようです
DATABASES の部分のみ紹介します
ユーザ名やホストは適宜変更してください
- vim mysite/settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django_test",
"HOST": "localhost",
"PORT": 3306,
"USER": "root",
"PASSWORD": "",
# "ENGINE": "django.db.backends.sqlite3",
# "NAME": BASE_DIR / "db.sqlite3",
}
}
manage.py
の編集
main の先頭で install_as_MySQLdb をコールします
-
vim manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import pymysql
def main():
pymysql.install_as_MySQLdb()
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.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()
マイグレーション
-
pipenv run python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, 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 admin.0003_logentry_add_action_flag_choices... 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 auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying polls.0001_initial... OK
Applying sessions.0001_initial... OK
動作確認
mysql -u root -p django_test -e "show create table polls_question \G"
Enter password:
*************************** 1. row ***************************
Table: polls_question
Create Table: CREATE TABLE `polls_question` (
`id` bigint NOT NULL AUTO_INCREMENT,
`question_text` varchar(200) NOT NULL,
`pub_date` datetime(6) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
最後に
切り替え自体は簡単に行なえます
プロダクションでは mysqlclient を使ったほうがいいかなと思います
DATABASES で複数のデータベースを管理するのはどうやればいいのだろうか
0 件のコメント:
コメントを投稿