Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はWindowsにインストールしたDjangoのデータベースとして、それに標準付属するSQLiteではなく、レンタルサーバーとして超有名なエックスサーバーにあるMySQLを使う方法の解説です。なおそのMySQLへはSSH接続でアクセスします。
Contents
今回の記事を書いておきながらアレなんですが・・・、正直、前回記事「DjangoのためにWindowsにmysqlclientをインストールする方法の解説【罠にハマり10時間費やす」でも書いたように、プログラミング初心者(ネットワークにも詳しくない人)は、素直にDjangoに標準搭載されているSQLiteを使うほうが、頭悪い言い方になりますが「1億倍」良いです。
プログラミング初心者でも、Djangoのついでに勉強したいという特殊な性癖を持っている、かつ、エックスサーバーと契約しているのでしっかり活用して元を取りたいという欲がある、という場合は別ですが・・・
以下の前回までの記事でWindowsにPythonをインストールし、その仮想環境を作り、そこにDjangoをインストールすることなどを説明しました。
上4の記事では、Windows上にMySQLをインストールし、エックスサーバー上のMySQLを操作するために必要なmysqlclientというものをpipでインストールしています。
今回もこれらの作業を完了していることを前提としています。
これはネットに多くの解説情報があるのでそちらを調べて実行しておいてください。
必要な情報(サーバー名などサーバーの情報、ユーザー名、パスワードなどなど)は全てしっかりとメモを残しておいてください。あとで使います。
これもネットに多くの解説情報があるのでそちらを調べて実行しておいてください。
秘密鍵・公開鍵のファイル名と保存場所などなど必要な情報は全てしっかりとメモを残しておいてください。あとで使います。
上でも述べましたが、以下の作業は必ず前回作業「DjangoのためにWindowsにmysqlclientをインストールする方法の解説【罠にハマり10時間費やす」で、mysqlclientをインストールし終えていることが必要不可欠です。
これまでの作業でPythonの仮想環境のvenv_djangoというフォルダを作成し、その中にDjangoのプロジェクト名「mysite」というプロジェクトを作成しました。すると、そのフォルダmysiteの中に、同名のフォルダがまたできています。つまり、
~/venv_django/mysite/mysite
というフォルダ構成になっています。
そして最後のmysiteフォルダの中に、setting.pyというファイルがあります。それをエディタで開いてください。そのファイル冒頭には最初から何も触っていなければ次のようなコメントアウトされた部分があります。
"""
Django settings for mysite project.
Generated by 'django-admin startproject' using Django 4.1.4.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
このすぐ下に、
import MySQLdb as mydb
from sshtunnel import SSHTunnelForwarder
from pathlib import Path
と加筆してください。
次に、下のように、
DATABASES = {
'default': {
省略
}
}
という部分がありますので、このすぐ直前に、以下のコードを加筆してください。(①~⑤はみなさんの環境に合わせて変更する必要があります)
port_num = 10022 # エックスサーバーではデフォルトでポート番号が10022に設定されている
key_path = '①'
ssh_tunnel = SSHTunnelForwarder(
('②', port_num),
ssh_username='③',
ssh_password='④',
ssh_pkey=key_path,
remote_bind_address=('⑤', ⑥),
)
ssh_tunnel.start()
つまり、
port_num = 10022 # エックスサーバーではデフォルトでポート番号が10022に設定されている
key_path = '①'
ssh_tunnel = SSHTunnelForwarder(
省略
)
ssh_tunnel.start()
DATABASES = {
'default': {
省略
}
}
という感じになります。
さて上コード中の①~⑤については、
① | 秘密鍵ファイルへの絶対パス(Windowsでは「¥」の取り扱いに注意) |
② | サーバーID.xsrv.jp(お客様の初期ドメイン)。ホスト名(sv***.xserver.jp)でも可。 例:xsample.xsrv.jp |
③ | ユーザー名(つまり②でのサーバーIDの部分) 例:xsample |
④ | 秘密鍵ファイルに対するパスフレーズ |
⑤ | MySQL ホスト名 例:mysql163001233.xserver.jp |
⑥ | 3306(レンタルサーバーにおけるMySQLの一般的なポート番号) |
となります。みなさんの環境にあわせて書き入れてください。
次に「DATABESE={~}」の部分を編集していきます。もともとその部分は、なにも触っていなければ次のようになっていると思います。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
}
}
defaultというキーに対応する値である辞書には、Djangoが標準で使うデータベースの情報(SQLite)が記載されているわけです。
それを次のように書き換えます。(⑥~⑧もその書くべき内容はみなさんの環境によって変わります)
DATABASES = {
'default': {
# 本来 'ENGINE': 'django.db.backends.sqlite3',
# 本来 'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': ssh_tunnel.local_bind_port,
'NAME': '⑦',
'USER': '⑧',
'PASSWORD': '⑨',
}
}
この⑦~⑨についても、
⑦ | 作成したデータベースの名前 |
⑧ | ⑦のデータベースのユーザ名(アクセス権所有者ユーザー) |
⑨ | ⑦のデータベースのパスワード |
を入力してください。
あるいは、次のようにするのもありです。すなわち、deaultというキーに対応する辞書は一切さわらずに、追加で新しい項目(キーと値=辞書)を作る方法です。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'ssh_xserver_mysql': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': ssh_tunnel.local_bind_port,
'NAME': '⑥',
'USER': '⑦',
'PASSWORD': '⑧',
},
}
こうするとdefaultのデータベース(つまりPC上のSQLite)とともに、他のデータベースも使えるようになってお得(?)です。このように複数のデータベースを切り替えて使い分けができるわけですね。
なおマイグレート作業のコマンドを入力するときに1つ注意点があります。
それはsetting.pyにおいてdefaultをいじらず追加で「ssh_xserver_mysql」というキーに対応する値の辞書を作った場合には、マイグレーションをするときには、コマンドプロンプトでオプションとしてデータベースの名前を指定する必要があります。次のコードにようにしてください。
(venv_django) C:\Users\hogehoge\venv_django\mysite>python manage.py migrate --database=ssh_xserver_mysql
defaultの値である辞書をいじった場合はそのような指定は不要です。
最速でプログラミングをマスターするならTechAcademy [テックアカデミー] 【PR】がオススメです。
マイペースで学ぶなら世界最大級の動画学習サイトUdemyがオススメです。セールで安く買える講座も多数!