[Django] Django와 Postgresql 연동하기

Cherry·2022년 3월 14일
2
post-thumbnail

이전 프로젝트에서는 mysql만 사용했어서 postgresql과는 어떻게 연동하는지 작성해보려 한다.

Postgresql DB 생성하기

$ psql postgres

위 입력어를 통해 postgresql을 접속해준다

postgres=# create database [databasename];

입력하면 데이터베이스가 생성되었다고 터미널에 표시된다.
그후 데이터 베이스에 접속해준다.
postgres=# \connect [databasename];

새롭게 만든, 데이터베이스로 들어왔으면, 새로운 유저를 만들고 몇가지 설정과 함께 권한을 부여한다.

순서대로 아래의 명령어를 입력한다.
create user root with password 'password';

root는 유저 이름이고, password는 비밀번호이다. 이때 비밀번호는 따옴표로 감싸주어야 한다!!

alter role root set client_encoding to 'utf-8';

alter role root set timezone to 'Asia/Seoul';

grant all privileges on database [databasename] to root;

밑에는 내가 이번에 만드는 프로젝트에서 Postgresql과 연결해본 예시다.

postgres=# create database project;
CREATE DATABASE
postgres=# \connect project;
You are now connected to database "project" as user "User".
project=# create user root with password 'password';
CREATE ROLE
project=# alter role root set client_encoding to 'utf-8';
ALTER ROLE
project=# alter role root set timezone to 'Asia/Seoul';
ALTER ROLE
project=# grant all privileges on database project to root;
GRANT

데이터베이스 설정은 끝! 그다음은 장고 세팅으로 넘어가준다.

나중에 다른 데이터베이스 생성후 이미 생성된 유저에게 모든 권한을 부여해줄 때 코드이다.

postgres=# GRANT ALL PRIVILEGES ON DATABASE (DB_NAME) TO (USER_NAME);

Django 세팅하기

먼저 psycopg2 라는 것을 설치해야 되는데, 터미널창에서 pip로 설치를 진행한다.
pip install psycopg2
이렇게 설치가 마무리 되었으면, 이제 postgreSQL을 적용할 django 프로젝트로 들어가서 settings.py 파일을 열어서 database항목을 찾아본다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

원래는 위와 같이 작성되어있는 것을 Postgresql에 맞게 수정해준다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'project',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

그후에 터미널에 들어가서 아래와 같은 명령어들을 입력한 후에 서버가 잘 돌아가는지 확인한다.

python manage.py makemigrations
python manage.py migrate

python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 14, 2022 - 10:02:57
Django version 3.0.8, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

이렇게 나오면 잘된거다!! 최종적으로 postgresql에 직접 들어가서 작성된 모델들이 테이블로 잘 생성되었는지 확인해주면 된다.

마주한 에러

중간에 마이그레이션을 하다가 에러가 발생했는데 에러 코드는 이러했다.
AssertionError: database connection isn't set to UTC
구글링을 해보니 psycopg2와 장고의 버전문제라고 했다.
psycopg2버전을 다운그레이드하던가 아니면 장고 settings.py에 가서
USE_TZ = True를 삭제하면 에러를 해결할 수 있다.
에러 관련 스택오버플로우 링크이다.
https://stackoverflow.com/questions/68024060/assertionerror-database-connection-isnt-set-to-utc
진짜 끝~!!

0개의 댓글