connect to a DB using psycopg2 without password
Surprisingly, the answer is to not specify a host at all. If you do this,
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mwt', }}
Then psycopg2 will connect using a Unix socket in the same manner as psql
. When you specify a HOST
, psycopg2 will connect with TCP/IP, which requires a password.
To avoid using a password in Django settings.py
change md5
to trust
in this line of pg_hba.conf
:
host all all 127.0.0.1/32 trust
For a detailed understanding of the postgres security configurations read this doc.
To locate this file:
sudo -u postgres psql -c 'SHOW hba_file;'
Check your pg_hba.conf
to allow connection from localhost
by user shaoran
, then either provide the password of shaoran
in Django settings or trust the user in pg_hba.conf
The fact that you could connect through psql
is because psql -d mwt
uses some default connection values which are set as trusted in pg_hba.conf
. For example, on my machine, the default host is local socket
instead of localhost