🌼
DjangoにPostgreSQLデータベースを導入する方法
Django のデフォルトのデータベースは SQLite3 になっています。
SQLite3 は、複数の同時書き込みができないため、本番環境には不向きです。
そこで、PostgreSQL に変更していきます。
動画解説
動画でも解説していますので、参考にしてください。
ライブラリインストール
dj-database-url
とdjango-environ
、psycopg2
をインストールします。
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