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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

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

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

✔YouTube解説動画

当記事の内容は動画を見ながら進めると、約15分程度で完了します。

動画ならではの情報も解説しているので、記事と一緒にご覧ください。

動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系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 ドキュメント
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アドレスを取得・設定する
タイトルとURLをコピーしました