과제/팀과제

[Django] 최종 프로젝트 : 지금은 전시상황!(6) - [BE]데이터베이스 postgresql로 변경하기

마이구미+ 2023. 6. 16. 11:59

<postgresql 설치>

 

[DB] postgresql DB구축하기

PostgreSQL을 DB를 구축해보도록 하겠습니다. 라이센스 정책이 무료이다보느 사용하는 업체들이 많아지고 관련해서 연계하는 경우가 많이 생겨서 구축해서 테스트를 해야되는 경우가 많아서 윈도

sosopro.tistory.com

  • 여기서 3번 이후로는 할 필요없다 vscode에서 할거니까
  • 설치완료까지 하면 vscode로 이동!

<vscode에 연동>

- 확장프로그램 설치

  • extentions(ctrl+shift+x) 눌러서 postgresql 검색 후 설치

  • 설치하면 왼쪽에 데이터베이스 탭이 생기는데 클릭하고 데이터베이스를 연결한다

  • 데이터베이스명 바꿔서 적어도 되는지는 모르겠다
  • 그냥 Create Connection 누를 때부터 이미 postgres로 써있어서 처음에 그렇게 연결했다가 연결 끊고 다시 연결할 때 데이터베이스명 이름 바꾸니까 에러 떴다
  • 아마도 postgres가 기본 데이터베이스명인 것 같다
  • sql shell 등으로 데이터베이스를 추가 생성하고 연결 끊었다가 다시 연결할 때는 새로 생성한 데이터베이스명을 입력해도 되지 않을까 싶다
  • 근데 어차피 연결하고 나서 vscode에서도 데이터베이스 생성할 수 있고 원하는 데이터베이스만 보이게도 설정할 수 있다

- vscode에서 데이터베이스 생성

  • 데이터베이스명 postgres 싫어서 다른 데이터베이스명을 가지고 싶은 사람만 보면 됨

데이터베이스 생성
생성 확인

  • 이제 여기서 newdatabase 만 보이게 하고 싶다면 맨 위 postgres 15.3 에 마우스를 올리면 깔때기 버튼이 있는데 그걸 선택하면 된다

  • 그럼 데이터베이스 선택하는 창이 뜨고 원하는 데이터베이스 체크한 후 ok 누르면 된다

postgres 데이터베이스가 사라진 모습


<DB연결>

- psycopg2 설치

pip install psycopg2

- .env

DB_ENGINE="django.db.backends.postgresql"
DB_NAME="데이터베이스 이름"
DB_USER="유저 이름"
DB_PASSWORD="비밀번호"
DB_HOST="호스트 주소 또는 localhost"
DB_PORT=포트번호
  • 포트번호는 정수형으로 입력한다
  • 비밀번호만 노출되면 안 되니까 비밀번호만 넣어도 되는데 통일성을 위해 다 넣었다

- settings.py

DATABASES = {
    "default": {
        "ENGINE": os.environ.get("DB_ENGINE"),
        "NAME": os.environ.get("DB_NAME"),
        "USER": os.environ.get("DB_USER"),
        "PASSWORD": os.environ.get("DB_PASSWORD"),
        "HOST": os.environ.get("DB_HOST"),
        "PORT": os.environ.get("DB_PORT"),
    }
}
  • .env 파일에서 다 불러온다

- migrate

python manage.py makemigrations
python manage.py migrate

- 관리자 계정 생성

  • 전시회 데이터는 관리자만 작성 가능하므로 관리자 계정을 먼저 생성해준다
python manage.py createsuperuser

- 필드 최대 길이 조정하기

  • 모델에 최대 길이 설정되어 있는 거랑 상관없이 postgresql의 칼럼에는 최대 길이가 정해져 있다
  • 우리가 가져온 데이터의 경우 content 필드의 최대 길이가 2만9천자인가.. 되는 게 있다
  • 그래서 칼럼 최대 길이를 30000으로 늘려주고
  • url도 지금 기본으로 최대 길이가 100으로 돼있어서 늘려줘야 한다

  • 2번이 open query다
  • 클릭해주면 저 창이 뜨고 아래 쿼리문을 복사해준다
ALTER TABLE exhibitions_exhibition ALTER COLUMN content TYPE VARCHAR (30000);
ALTER TABLE exhibitions_exhibition ALTER COLUMN image TYPE VARCHAR (200);
ALTER TABLE exhibitions_exhibition ALTER COLUMN direct_url TYPE VARCHAR (200);
  • 그 다음 차례차례 Execute 버튼을 눌러주면 된다
  • 쿼리문 작성 순서나 실행 순서는 마음대로 해도 된다

- 데이터 DB에 저장하기

  • 팀원분이 데이터를 가져와서 가공한 파일 속 데이터들을 데이터베이스에 넣어준다
python manage.py loaddata exhibitions/utils_data.json

<결과물>

  • 추가로 런서버 잘 되는지도 확인해 준다
python manage.py runserver