DjangoアプリでPostgreSQLを使う|設定方法の解説

Django

(最終更新月:2022年1月)

✔Djangoを使っているこんな方へ向けての記事となります

「DjangoでPostgreSQLの設定方法が知りたい!」

「少し面倒くさそう、、PostgreSQLでどんなメリットがあるの?」

「そもそも新しいサーバーでポスグレがインストールされていない」

✔当記事を通じてお伝えすること

  • DjangoアプリでPostgreSQLを使うための設定方法を解説します
  • 「PostgreSQLにはどんなメリットがあるの?」を紐解きます
  • PostgreSQLがそもそもインストールされていないという方に準備方法をお伝えします

【著者プロフィール】

profile_icon
【Python・Django歴】10年 x 【営業マン歴】11年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、下記アプリの作り方、コード等を公開、解説しています

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです

以下の記述では、PostgreSQLを略称「ポスグレ」と呼んで解説を進めていきます

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。

>>デザナルに興味がある方はこちらからどうぞ<<

詳細をまとめた記事もございますので、ぜひご覧ください。

DjangoアプリでPostgreSQLを使う|設定方法の解説

PostgreSQL側の設定変更

ポスグレがインストールできている方へDjangoで使用するための設定変更を解説します

ポスグレ自体インストールしていない方はまず3章をご覧になってから戻ってくることをオススメします

psqlユーザーのパスワードを設定

ポスグレのメインユーザー「postgres」にパスワードを設定します

postgres=# ALTER ROLE postgres WITH PASSWORD 'postgres';

ここではパスワードを「postgres」としてますが、お好きなものにして構いません

postgreSQLをパスワード認証へ変更する

現在はpeer認証という、OSのユーザーとpostgreSQLユーザーが一致している場合のみアクセスできる、認証方法になっています

Djangoでアクセスしていくためにも、パスワードによる認証へ変更します

/etc/postgresql/13/main/pg_hba.conf

※13はバージョンになりますので、ご自身のバージョンにより異なります

$ cd /etc/postgresql/13/main
$ sudo nano pg_hba.conf

ファイル内で

local all postgres peer
local all all peer

という行を探します(結構下の方)

見つかりましたら、peermd5へ変更します

local all postgres md5
local all all md5

ポスグレのリスタート

$ sudo /etc/init.d/postgresql restart

アクセスできるか確認します

$ psql -U postgres -d postgres

パスワードを入力して、中へ入れればOKです

Djangoプロジェクト用のユーザー作成と設定

Djangoプロジェクトでデータベースアクセスをするユーザーを作成、設定します

データーベースへアクセスして、まずはユーザーを作成しましょう

CREATE USER djangouser WITH PASSWORD 'djangopassword';

djangouserdjangopasswordはそれぞれDjangoプロジェクトで使用するユーザー名パスワードになりますのでお好きな文字列を入力してください!

ユーザーの設定を以下の通り変更します

ALTER ROLE djangouser SET CLIENT_ENCODING TO 'utf8';
ALTER ROLE djangouser SET DEFAULT_TRANSACTION_ISOLATION TO 'read committed';
ALTER ROLE djangouser SET TIMEZONE TO 'Asia/Tokyo';

細かい説明は省きますが、文字コードや時間帯の設定になります

Djangoプロジェクトで使うデータベースを作成

CREATE DATABASE mydatabase;

「mydatabase」の部分をお好きなデータベース名にして下さい

データベースとユーザーを紐付ける

作成したデータベースへのアクセス、編集権限をDjangoユーザーに与えます

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO djangouser;

アクセスできるか確かめよう!

\q

で一度postgreSQLからログアウトします

先程作成したユーザー、データベースへアクセスします

psql -U djangouser -d mydatabase

パスワードを入力してログインできれば成功です!

Djangoの設定を書き換える

ポスグレ側の設定が終わりましたら、Djangoでの設定に移ります

pipでpsycopg2のインストール

DjangoでpostgreSQLを扱うのに必要なパッケージをインストールします

$ pip install psycopg2-binary

virtualenv(仮想環境)をアクティベートすることを忘れずに!!

settings.pyの書き換え

データベース設定の箇所を下記の通り書き換えましょう

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': BASE_DIR / 'db.sqlite3',
     }
 }

を、下記へ変更します

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': 'mydatabase',
         'USER': 'djangouser',
         'PASSWORD': 'djangopassword',
         'HOST': 'localhost',
         'PORT': '5432',
     }
 }

行の最初に「#」を入れて無効化することで、

元の記述を念の為取っておくこともできます!

データベース名、ユーザー名、パスワードはご自身の設定したものに変更しましょう

データベースのマイグレーション

$ python manage.py makemigrations
$ python manage.py migrate

エラーが出なければOK!

スーパーユーザーの作成

データベースが一度リセットされています

スーパーユーザーを作成しましょう

$ python manage.py createsueruser

PostgreSQLはなぜオススメ?

ご存知の方もいらっしゃると思いますが、DjagnoにはpostgreSQLを使用しているユーザーに向けた特別なモデルフィールドが用意されています

PostgreSQL specific model fields | Django ドキュメント | Django

特にフィールドにリストを保存できる「ArrayField」などは使える場面も多いはず!

どれを使っているわけでもなく、こだわりがない方はポスグレをオススメします

ArrayFieldについてはこちらの記事でも少し触れています

ポスグレをUbuntu環境にインストール・設定する方法

そもそも、「ポスグレがインストールされていない!」という方はこちらからどうぞ!

パッケージのインストール

$ sudo apt update && sudo apt upgrade
$ sudo apt install libpq-dev postgresql postgresql-contrib

まずはアップデート

その後に必要な3つのパッケージをインストールしましょう!

  1. libpq-dev
  2. postgresql
  3. postgresql-contrib

postgresユーザーのパスワード設定

インストールが完了すると「postgres」という新しいユーザーが作成されています

今後データベースへアクセスするためにパスワードなどを設定しておきましょう

$ sudo passwd postgres

パスワードを2回入力して設定完了です

まとめ

当記事では、DjangoアプリでPostgreSQLデータベースを使うための設定方法を解説しました

まとめると、

PostgreSQL側で、

  • ユーザーのログイン周りの設定
  • データベースの作成と設定

が必要で、Django側では、

  • ライブラリのインストール
  • settings.pyの書き換え
  • スーパーユーザーの作成

が必要になります

うまくご活用頂ければ幸いです

当記事をご覧の方の中にも「そろそろウェブでアプリを公開してみたいなぁ」「どうやって公開するの?」という方もいらっしゃるのではないでしょうか?
下記の通り、別記事ではDjangoアプリの公開方法公開までの準備についての解説をしていますのでご覧ください!

「Webアプリを公開したい!」という方へ

【保存版】Apache WebサーバーでDjangoアプリを公開
Djangoが公開できる月500円~のレンタルサーバー
【初心者向け】ムームードメインで独自ドメインを取得する3ステップ
固定IPアドレスのみ単独で契約できる「インターリンク マイIP」Ubuntuコンピューターに固定IPを付与する方法

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました