Python 仮想環境内で Django プロジェクト用データベースを PostgreSQL で作成し、Django プロジェクトと紐づける方法を書きます。
今回は例として「sample_db」というデータベース作成し、プロジェクトと紐づけます。
1. PostgreSQL で新規のデータベースを作成
PostgreSQL を起動し「sample_db」という名前のデータベースを作成します。
% sudo brew services start postgresql % createdb sample_db
「psql -l」でデータベースのリストを表示すると、「sample_db」が作成されたのが確認できます。
% psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+------------------+----------+---------+-------+--------------------------------------- postgres | ユーザー名 | UTF8 | C | C | sample_db | ユーザー名 | UTF8 | C | C | template0 | ユーザー名 | UTF8 | C | C | =c/ユーザー名 + | | | | | ユーザー名=CTc/ユーザー名 template1 | ユーザー名 | UTF8 | C | C | =c/ユーザー名 + | | | | | ユーザー名=CTc/ユーザー名 (4 rows)
ちなみにデータベースを削除したい場合は「dropdb sample_db」と入力します。
2. Django プロジェクトとデータベースの紐付け
Django プロジェクトの settings.py を変更し、先ほど新規作成したデータベースを紐付けます。
プロジェクト作成時に自動作成された settings.py の内容は下記の通り。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
これを下記の様に変更します。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'sample_db', 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': '', 'PORT': '', } }
またその際にファイル上部に下記を追記し os モジュールをインポートします。
import os
3. 仮想環境で接続用モジュールをインストール
Python で PostgreSQL データベースに接続するために、接続用ドライバのモジュールが必要となります。もっとも多く使われている psycopg2 というモジュールをインストールします。
仮想環境に入った状態で「pip install psycopg2-binary」を実行します。
(sample_venv) % pip install psycopg2-binary Collecting psycopg2-binary Downloading https://files.pythonhosted.org/packages/2c/85/c26507efb110f5a91f503e517f1db55f12ebecb001ff224b2cea234a07ef/psycopg2_binary-2.8.6-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.5MB) |████████████████████████████████| 1.5MB 7.1MB/s Installing collected packages: psycopg2-binary Successfully installed psycopg2-binary-2.8.6 WARNING: You are using pip version 19.2.3, however version 21.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. (sample_venv) %
4. ちなみに
PyCharm の runserver を実行した時に下記のエラーが出て一瞬焦りましたが、PostgreSQL を起動したら治りました。
django.db.utils.OperationalError: could not connect to server: No such file or directory
ちなみのちなみに、settings.py の「DATABASES」の部分をコメントアウトなどするとデータベースを起動していなくても問題なく runserver を実行できます。
5. 参考書籍
僕は始め下記の書籍に沿って Django の全体像を勉強しました。書籍は PostgreSQL を使用した開発になっているので参考にしてみてください。