🌼

DjangoにPostgreSQLデータベースを導入する方法

2021/11/29に公開

Django のデフォルトのデータベースは SQLite3 になっています。

SQLite3 は、複数の同時書き込みができないため、本番環境には不向きです。

そこで、PostgreSQL に変更していきます。

動画解説

動画でも解説していますので、参考にしてください。

https://youtu.be/7cUFU659S3Y

ライブラリインストール

dj-database-urldjango-environpsycopg2をインストールします。

requirements.txt

django-environ~=0.4.5
dj-database-url==0.5.0
psycopg2~=2.9.2
$ pip3 install -r requirements.txt

設定

settings.py の DATABASES を書き換えます。

何も設定しないと SQLite3 が使われますが、環境ファイルでデータベースを指定すると指定したデータベースを使うようになります。

settings.py

import environ
import os

env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))

# デフォルト:SQLite3
# 環境ファイルで指定したデータベースを使用
DATABASES = {
    'default': env.db(),
}

環境ファイル

.envファイルを作成して、PostgreSQL データベースを設定します。

ユーザー名:test_user

データベース名:test_db

パスワード:test_password

.env

DATABASE_URL=postgres://test_user:test_password@localhost:/test_db

PostgreSQL データベース構築

PostgreSQL を構築していきます。

コマンドは Ubuntu 用になっています。

Mac でpostgresqlをインストールするときはbrewコマンドなど使用してインストールしてください。

$ sudo apt install postgresql
$ sudo service postgresql start
$ systemctl enable postgresql
$ sudo -u postgres psql

postgres=# CREATE DATABASE test_db;
CREATE DATABASE

postgres=# CREATE USER test_user WITH PASSWORD 'test_password';
CREATE ROLE

postgres=# ALTER ROLE test_user SET client_encoding TO 'utf8';
ALTER ROLE

postgres=# ALTER ROLE test_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE

postgres=# ALTER ROLE test_user SET timezone TO 'UTC';
ALTER ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE test_db TO test_user;
GRANT

postgres=# \q

これで設定が完了しました。

migrate してデータベースが構築できるか試してみてください。

$ python3 manage.py migrate

Discussion