DB初心者向け!MySQLとDjangoを接続[Mac環境]
Djangoを導入すると、最初からSQLiteという軽量データベースが使えます。SQLite、趣味や個人で開発している分には全く申し分ない性能です。
動作が速い・ファイル形式で取り回しが楽・ファイルサイズが小さい等、様々なメリットがある...らしい。
DBの使いこなしているわけでもなく、他のDBを使っているわけでもないためなんとも言えません。言い換えるなら、SQLiteメリットを感じることができるレベルではない!
DBで高いシェアを誇るのがMySQL。それに伴い、情報や使用者が多いのもMySQL。
当分、DBを深堀りする予定はないので、リファレンスが多いMySQLに変えておこうと決心。MySQL覚えておけば他DBへの乗り換えも楽みたいですし。
今回は導入として、Mac上にMySQLを導入してDjangoと接続しています。
環境
- macOS Sierra 10.12.5
- Homebrew 1.2.3
- MySQL Ver 14.14 Distrib 5.7.18
- Python 3.6.0
- Django 1.11.2
- PyMySQL 0.7.11
MySQLの導入
MySQLのインストールには、Macのパッケージ管理ソフトHomebrewを使用。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install mysql mysql --version
mysqlのバージョンが確認できましたか。簡単ですね。Homebrewすごい。
MySQLでデータベース作成
MySQLサーバーを立ち上げて、MySQLのコマンドラインを起動します。
mysql.server start mysql -u root
起動がうまくいけば、ホスト名(左側の表示)の部分がmysql>
となってるはずです。
サーバーの立ち上げが上手くいかない場合は過去記事を参照ください。
MySQLのコマンドラインが立ち上がったら、djangoと接続するためのデータベースを作成します。
CREATE DATABASE django_mysql; SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | django_mysql | | mysql | | performance_schema | | sys | +--------------------+
Djangoの接続するDBをMySQLに設定
まずdjangoのプロジェクトを作成します。
pipでDjangoを入れます。ついでにpythonとMySQLを紐づけるpymysqlも一緒にインストールしています。
python -m venv env
. env/bin/activate
pip install django pymysql
django-admin startproject django_mysql
cd django_mysql
django_mysql/settings.pyに使用するDBがMySQLであることを明記します。
その際、pipで導入したpymysqlのimportを忘れないようにしましょう。よく忘れちゃう。
import pymysql pymysql.install_as_MySQLdb() DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_mysql', #上記で作成したデータベース名 'USER': 'root', #MySQLの設定変更をしていなければ以下コピペ 'PASSWORD': '', 'HOST': '', 'PORT': '', # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
DjangoでDBのテーブルを作成
Djangoのアプリケーションを作成し、django_mysql/settings.pyに名前を記述します。
python manage.py startapp apps vi django_mysql/settigns.py
INSTALLED_APPS = [ 'apps', #この行 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
次にアプリケーションのmodels.pyを編集してデータベースのテーブルを記述します。
ちなみに、CharFieldは文字列、DataTimeFieldは日時を扱います。名前の通りですね。
vi apps/models.py
from django.db import models class Text(models.Model): title = models.CharField(max_length=20) content = models.CharField(max_length=200) pub_date = models.DateTimeField('date published')
models.pyで書いたモデルを元にマイグレーションします。
python manage.py makemigrations python manage.py migrate
マイグレーションが成功したら、MySQLにテーブルが作成されています!
DjangoとMySQLの接続を確認
テーブルが作成されているかをMySQLのシェルで確認してみましょう。
mysql -u root USE django_mysql; SHOW TABLES; +----------------------------+ | Tables_in_django_mysql | +----------------------------+ | apps_text | | 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 | +----------------------------+ DESCRIBE apps_text; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(20) | NO | | NULL | | | content | varchar(200) | NO | | NULL | | | pub_date | datetime(6) | NO | | NULL | | +----------+--------------+------+-----+---------+----------------+
最上段のidは自動で挿入されるようです。ユニークなIDとして働きます。title、content、pub_dateはapps/models.pyに記述した通りですね。
おわりに
接続できればSQLiteと同様に取り扱うことができます。後は、SQLを記述せずに管理画面から操作できるDjangoのメリットを堪能しましょう。
最後までお読み頂きありがとうございました。
MacにMySQLをインストールして触ってみる | Developers.IO
はじめての Django アプリ作成、その2 | Django ドキュメント | Django
https://wayohoo.com/mysql/command-list-of-mysql-for-beginners.html