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

Django

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

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

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

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

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

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

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

【著者プロフィール】

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

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

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

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

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

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

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

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を使用しているユーザーに向けた特別なモデルフィールドが用意されています

Django
The web framework for perfectionists with deadlines.

特にフィールドにリストを保存できる「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の書き換え
  • スーパーユーザーの作成

が必要になります

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

✔ウェブアプリを公開したい方へのおすすめ記事

【保存版】Apache WebサーバーでDjangoアプリを公開
Djangoが公開できる月500円~のレンタルサーバー
【初心者向け】ムームードメインで独自ドメインを取得する3ステップ
【実体験】マイIPの使い方を解説|固定IPアドレスを取得・設定する

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

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

✔当ブログ掲載の記事

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

公式LINEも始めました。記事更新についてや、当ブログ内の人気記事などの情報を定期的に配信しています。

友だち追加

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCに投げ銭をする

タイトルとURLをコピーしました