Postgresql 과 Django 연동 후 모델 생성

Gyullbb·2020년 11월 2일
0

1. Postgresql 설치

윈도우 운영체제를 사용하기에 공식사이트에서 최신 버전인 13버전의 윈도우용 .exe파일을 설치하였다.

https://www.postgresql.org/

Download -> Windows -> Download the installer -> Download

이때 Visual C++이 없을 경우 DB 서버 실행 시 에러가 나기 때문에 Visual C++을 깔아주어야 한다.

관련 에러 : Install fails with getlocales.exe child killed error

Visual C++ 설치 주소

실행 파일을 실행시킨 후 설정 값을 주어진대로 실행 시키면 Postgresql 설치가 완료된다. 설치 시 암호를 입력하는 부분이 있는데, 이 암호를 기반으로 psql을 실행하기 때문에 기억해야 한다.

2. Postgresql 설정

Postgresql을 설치하면 psql 쉘 프롬프트가 설치된다. psql을 검색하여 실행한다.

사용자의 암호 부분에는 postgres를 설치할 때 설정한 암호를 입력하면 된다.

이후 Django 프로젝트에서 사용할 DB를 생성한다.

CREATE DATABASE 데이터베이스명;

\ㅣ명령어를 사용해서 데이터베이스가 잘 생성되었는지 확인할 수 있다.

생성한 데이터베이스로 접근한다.

\C 데이터베이스명;

접근하면 쉘의 앞부분이 데이터베이스명-#으로 변한다.

이후 새로운 유저를 만든 후 설정을 생성하고 권한을 부여하는 작업을 진행한다.

create user 유저명 with password '패스워드';
alter role 유저명 set client_encoing to 'utf-8';
alter role 유저명 set timezone to 'Asia/Seoul';
grant all privileges on database 데이터베이스명 to 유저명

여기까지가 데이터베이스에 대한 설정이다. 유저에게 데이터베이스에 대한 권한을 부여해야 Django에서 DB를 다룰 때 권한을 인정받게 된다.

Django와 PostgreSQL 연동

우선 python과 PostgreSQL을 연동하기 위해서는 psycopg2를 설치해야 한다.

pip install psycopg2

Django의 기본 DB는 sqlite3이기 때문에 해당 설정을 PostgreSQL로 바꾸기 위해 settings.py의 Database설정을 바꿔준다.

#settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '데이터베이스명',
        'USER': '유저명',
        'PASSWORD': '유저 생성시 사용한 패스워드',
        'HOST': 'localhost',
        'PORT': '',
    }
}

이 후 Django model 작성은 일반적인 Django ORM 방법을 그대로 사용하면 된다.

모델을 작성한 후 migrate를 위해 다음과 같은 명령어를 입력한다.

python manage.py makemigrations
python manage.py migrate

이 후 psql에서 \dt명령어를 통해 테이블 리스트를 확인해보면 다음과 같은 결과가 나온다.

생성한 모델이 잘 올라감을 확인할 수 있다.

PostgreSQL migrate 에러 대처 방법

error "account_user" 이름의 릴레이션(relation)이 없습니다 LINE 1: ...user"."date_joined", "account_user"."map_id" FROM "account_u...

데이터베이스로 sqlite3를 사용할 때에는 기존의 migrate 로그들로 인해 생기는 위와같은 에러를 해결하기 위해 migrate 폴더를 삭제하고 sqlite3를 삭제한 후 다시 makemigrations와 migrate를 진행하는 방식을 사용하였다.

PostgreSQL에서는 세션을 종료시킨 후 데이터베이스를 드랍하면 된다.

😉[데이터베이스 DROP]
psql에 접속한 후 내가 삭제할 데이터베이스가 아닌 데이터베이스에 접근한다.

\c postgres

테이블을 Drop하는 기본 명령어는 drop database 데이터베이스명;이다. 하지만 이때 데이터베이스를 사용하는 세션이 존재하기 때문에 drop이 되지 않는 경우가 생길 수 있다.

이 때는 다음 명령어를 사용해서 세션을 강제 종료할 수 있다. (어차피 drop해버릴 db이기 때문에..)

SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE datname = '데이터프레임명';


이후에 drop database 데이터베이스명; 명령어를 입력하면 DB가 drop된다. \l 명령어를 통해 확인하면 DB가 DROP된 것을 확인할 수 있다.

[추가적으로 pgAdmin4 다루기]

pgAdmin4의 왼쪽 트리를 보았을 때 Tables 하위에 django_migrations 테이블이 있는 것을 확인할 수 있다.


해당 버튼을 누르면 아래와 같이 sql 문을 작성할 수 있는 칸이 나온다.


해당 명령어를 치면 django_migrations 폴더 하위의 데이터들이 삭제된다.

프로젝트 관련 메모

모델을 작성하다보니 왜 GeoDjango를 쓰는지 알 것 같았다.

간단하게 from django.contrib.gis.db import modelspoint필드를 사용하여 쉽게 위도, 경도 값을 저장할 수 있다.

Geodjango

django FloatField

python에서 float 인스턴스로 표현된 부동 소수점 숫자.

이 필드의 기본 폼 위젯은 localize가 False일 때 NumberInput이고 그 외는 TextInput이다.

FloatField

Foreignkey 정리 보기

[출처]

profile
🎈도전 속의 여유를 즐기자🎈

0개의 댓글