Django에 postgres연동하기

postgresql은 오픈소스 데이터베이스다.

postgresql 설치

$ sudo apt-get install postgresql postgresql-contrib

우선 postgres user로 접속한다음에 psql 클라이언트를 실행한다.

$ sudo -i -u postgres psql

psql 클라이언트의 prompt로 접속했으면 DB와 유저를 생성한다. ${user}, ${password}, ${db_name}은 원하는 값으로 설정해준다.

postgres# CREATE USER ${user} PASSWORD '${password}';
postgres# CREATE DATABASE ${db_name} ENCODING 'utf-8';
postgres# ALTER DATABASE ${db_name} OWNER TO ${user};

pytest가 잘 동작하지 않으면 postgres# ALTER USER {user} CREATEDB; sql을 수행해본다.


django에 postgresql 연동하기(with dotenv)


postgresql 접속정보는 dotenv로 관리할 것이다. dotenv는 Django가 실행될때 환경변수 파일에 대한 설정값이 들어있는 파일을 읽어 OS에 등록해주는 역할을 수행한다.

postgresql접속을 위한 client도 설치해준다.

$ sudo apt-get install python-dotenv psycopg2

BASE_DIR(manage.py가 있는 위치)에 아래와 같은 내용의 .env파일을 생성한다. ${user}, ${password}, ${db_name}은 postgresql에서 생성한 값으로 설정해준다. test를 하는 경우 test용 db를 따로 만들어서 관리하는게 좋다. ${host}는 postgresql이 위치한 주소를 입력해준다. local에 설치한경우 localhost를 지정하면 된다.

# .env 파일
DB_USER=${user}
DB_PASSWORD=${password}
DB_NAME=${db_name}
DB_TEST=${test_db_name}
DB_HOST=${host}

setting.py의 DATABASES 변수에 postgresql server정보를 입력한다. 기존 sqlite에 대한 내용은 삭제한다.

from dotenv import load_dotenv

load_dotenv(dotenv_path=os.path.join(BASE_DIR, '.env'), encoding='utf-8')

DATABASES = {
	'default' : {
		'ENGINE': 'django.db.backends.postgresql',
		'NAME': os.getenv('DB_NAME', ''),
		'USER': os.getenv('DB_USER', ''),
		'PASSWORD': os.getenv('DB_PASSWORD', ''),
		'HOST': os.getenv('DB_HOST', ''),
		'PORT': '5432',
		'TEST': {
			'NAME': os.getenv('DB_TEST', ''),
		},
	}
}

DB에 migrations해본다.

$ python manage.py makemigrations
$ python manage.py migrate