backend/django

postgresql과 django 연동 (장고 데이터베이스 연동하기)

seul chan 2017. 3. 1. 12:44

기본 세팅중에 가장 애를 먹었던 부분이다. 


우선 postgressql을 실행한다.


$sudo su -postgres 

(혹은 $su postgres) 이후 패스워드 입력 (postgresql 사용자 설정 시 적었던 비밀번호)

$psql #이제 쉘이 바뀌는 것을 볼 수 있다.


*데이터베이스 생성하기

# mysite 대신에 아무 데이터베이스 명을 써도 되지만, 아마도? 장고 프로젝트 네임과 같아야 하는 것 같다. 나는 polls 예제를 따라하려고 만든 mysite를 그대로 데이터베이스 명으로 사용하였다. 

$CREATE DATABASE mysite; 


*user, password 지정: 

#장고에서 써야하니 꼭 기억해야 한다! 이걸 지정하지 않았다가 장고에서 데이터베이스와 연동할 때 한참동안 password가 없다는 말이 떠서 고생했었다. 


$CREATE USER user_id WITH PASSWORD 'password'; (본인의 id, password를 입력한다. 어떤걸 입력해도 되지만 기억해둘것!)


*이후 인코딩, isolation, timezone 세팅하기 

#user id 값에 자신의 id를 넣어야함- bartkim0426은 제 아이디입니다!


$ALTER ROLE bartkim0426 SET client_encoding TO 'utf8';

$ALTER ROLE bartkim0426 SET default_transaction_isolation TO 'read committed';

$ALTER ROLE bartkim0426 SET timezone TO 'UTC';


*user에게 데이터베이스 접근 권한 주기

(mysite 대신에 자신의 프로젝트명, id 대신에 자신의 id 넣기)

$GRANT ALL PRIVILEGES ON DATABASE mysite TO bartkim0426;


# 완료 후 postgres shell 끄기

\q


# postgres 나가기

$exit



이제 기본적인 postgresql 세팅은 끝났다. 이제 데이터베이스를 장고와 연동하여야 한다.



*장고 세팅하기


-psycog2 설치하기 

장고에서 postgresql을 사용할 수 있도록 도와주는..? 패키지인것 같다. 공식 문서에서도 언급하는 걸 보니 꼭 설치해야 하나보다.


$pip install django psycopg2



-settings.py 편집

자신의 장고 프로젝트 폴더 내 settings.py를 실행한다.

(나의 경우는 mysite/mysite/settings.py)


. . .


DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

    }

}


. . .

위의 DATABASE를 아래의 것으로 바꿔야 한다 (빨간색 부분을 바꾸면 된다)

(vim에서 / 입력 후 DATABASE를 검색하면 쉽게 찾을 수 있다.)

. . .


DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.postgresql_psycopg2',

        'NAME': 'myproject',

        'USER': 'myprojectuser',

        'PASSWORD': 'password',

        'HOST': 'localhost',

        'PORT': '',

    }

}


. . .

*myproject 대신 자신의 프로젝트명, myprojectuser 대신 본인의 id, password 대신 본인의 비밀번호를 입력한다. 


#나의 경우에는 password를 비워놓는 예제를 보고 따라했지만 연동하는 도중에 계속 password가 없다는 에러가 나왔다. 구글링해도 해결이 안되서 다시 패스워드를 넣고 만들었더니 해결되었다. 



*데이터베이스 migrate 하기

-migrate는 나의 데이터베이스를 장고와 연동?하는 과정이다. 정확하게는 장고에게 데이터베이스에 아웃풋을 주는 과정(?)인것같다. (장고가 SQL문을 형성해 보내주므로...) 

-이 부분은 추후 앱을 만드는 과정에서 해도 상관 없는것같다. 


$cd ~/mysite (본인의 장고 프로젝트)

$python manage.py makemigrations

$python manage.py migrate


$python manage.py createsuperuser




참고 (일일히 답변을 달지는 못하지만 모든 분들에게 감사한다. 나중에 나도 나눌 수 있는 사람이 되겠다.)

https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-14-04

http://stackoverflow.com/questions/5420789/how-to-install-psycopg2-with-pip-on-python

http://egloos.zum.com/ita9naiwa/v/4211543