【PostgreSQL】DjangoでPostgreSQLを使うときの設定方法

この記事ではPythonのウェブアプリ開発のフレームワークであるDjangoでPostgreSQLを使うときの設定方法を解説します。
DjangoにはデフォルトでSQLiteというリレーショナルデータベースが付属していますが、より高機能なPostgreSQLを使いたい場面も多いと思います。
初めて使う場合なんかは特によくわからないと思うので、ここで詳しく解説します。
PostgreSQL のインストールと設定
PostgreSQLのインストール
まずはPostgreSQLをインストールします。
以下の記事でインストール方法とPostgreSQLの操作ツールであるpsql
の使い方を解説していますので参考にしてみてください。

インストール方法はUbuntu(WSL2でもOK)向けですが、ウェブアプリ開発をするならLinuxがいいかなと思うのでこれを機にチャレンジしてみるのがよいと思います。psql
の使い方は共通です。
Windowsに直接インストールするならPostgreSQLのインストールページ からDownload the Installer をクリックしてインストーラをダウンロードできます。
ユーザーとデータベースの作成
まず、psql
を開いて対話形式で設定していきましょう。
ここでは例としてユーザー名を eriru
、データベース名をerirudb
として作ってみます。
以下のコマンドでユーザーを作成します。
CREATE USER eriru WITH PASSWORD '好きなパスワードを入力';
次に以下を実行してデータベースを作成します。
CREATE DATABASE erirudb WITH OWNER eriru;
次にユーザーの設定を以下のとおり行います。
ALTER ROLE eriru SET client_encoding TO 'utf8';
ALTER ROLE eriru SET default_transaction_isolation TO 'read committed';
ALTER ROLE eriru SET timezone TO 'Asia/Tokyo';
タイムゾーンの設定はDjangoのTIME_ZONEの設定(settings.pyに書いてある)と整合させてください。
これでPostgreSQL側の設定はOKです。
Django 側の設定
PostgreSQL への接続設定は、settings.py
の DATABASES
セクションで行います。
settings.pyに以下の通り記述します。
# settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.postgresql',
'NAME': 'erirudb',
'USER': 'eriru',
'PASSWORD': '設定したパスワード',
'HOST': 'localhost', # PostgreSQLが動作しているホスト名またはIPアドレス
'PORT': '', # PostgreSQLのポート番号 (デフォルトは5432, 空欄でデフォルトを使用)
}
}
# タイムゾーン設定 (PostgreSQLのtimezone設定と整合させる)
USE_TZ = True
TIME_ZONE = 'UTC' # PostgreSQLが'UTC'ならこちらも'UTC'に。
# 日本時間で表示したい場合は、アプリケーション側で変換するか、
# TIME_ZONE = 'Asia/Tokyo' に設定し、データベース側も合わせる。
注意点として、テスト環境であればこれでも大丈夫ですが、セキュリティ的にはsettings.pyにNAME~PORTまでの項目を直接記述するのは危ないので、.env
ファイルを別途用意してそこから読み込むか、環境変数から読み込むようにしてください。
まとめ
この記事ではPythonのウェブアプリ開発のフレームワークであるDjangoでPostgreSQLを使うときの設定方法を解説しました。
以上の設定でDjangoアプリでPostgreSQL データベースと正しく連携できるようになると思います。