Connect Django to a Postgres database
To connect to a PostgreSQL database first make sure you have an environment variable called DATABASE_URL
set to the URL of your database.
DATABASE_URL=postgres://user:password@127.0.0.1:5432/database_name
Hosts like Heroku will automatically set this when you provision the database; providing you are using Heroku Postgres1.
If you are working locally and using Pipenv you can set the config for DATABASE_URL
in a .env
file and it will load the .env
as part of your virtual environment2.
Install the required package
To use PostgreSQL as your database in Python applications you must use the psycopg2
package3.
pipenv install psycopg2-binary
Connecting in Python
import os
import psycopg2
db = psycopg2.connect(os.environ['DATABASE_URL'], sslmode='require')
Connecting in Django
Update the connection details in settings.py
, making sure to import os
and urlparse
from the standard library.
# settings.py
import os
from urllib.parse import urlparse
db = urlparse(os.environ['DATABASE_URL'])
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': db.path.strip('/'),
'USER': db.username,
'PASSWORD': db.password,
'HOST': db.hostname,
'PORT': db.port,
}
}
Using a package to simplify
As an alternative to the above there is a package available called dj_database_url
4. This package parses the value of the DATABASE_URL
environment variable and converts it to a dictionary that Django can use.
pipenv install dj-database-url psycopg2-binary
# settings.py
import dj_database_url
DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)