동캄의 코딩도장

장고 - DB 연동 설정 본문

back/장고

장고 - DB 연동 설정

동 캄 2023. 4. 25. 23:36

장고 - DB 연동 설정

django-admin startproject [프로젝트명] 명령어를 통해 장고 프로젝트를 시작했다면,

settings.py 파일도 자동으로 생성된다. 이 파일안에, 연동되는 DATABASES 정보를 저장할 수 있다.

기본적으로 sqlite과 연동되어있고, 필요에따라 POSTGRES, MYSQL등과 연동할 수 있다.

기본적으로 연동된 sqlite3

 

 

POSTGRESQL과 연동

연결 설정은 다음과 같이 할 수 있다.

 

ORM 이란?

장고 프레임워크는 ORM(Object Relational Mapping, 객체-관계 매핑) 을 지원한다. 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

따라서 장고는 DB에 접근할 때, 쿼리문을 직접 작성하지 않고, 모델(Model)을 이용하여 접근할 수 있고, DB에 간접적으로 접근할 수 있다. (ORM)

장점

  1. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
  2. 재사용 및 유지 보수의 편리성이 증가한다.
  3. DBMS에 대한 종속성이 줄어든다.

단점

  1. 완벽한 ORM 만으로 서비스를 구현하기 어렵다.
  2. 프로시저가 많은 시스템일 경우 객체 지향적인 장점을 활용하기 어렵다

 

모델 사용 예시

모델을 통해서,

Question 이라는 테이블을 생성하였고, question_text라는 최대 길이가 200인 char 자료형을 가지는 필드와 pub_date 라는 날짜 자료형을 필드를 생성했다.

Choice 라는 톄이쁠을 생성하였고, question 이라는 테이블을 외래키로 삼고, CASCADE 속성을 추가하였다. choice_text라는 최대 길이가 200인 char 자료형을 가지는 필드와 votes라는 기본값으로 정수 0 값을 가지는 정수 자료형 필드를 생성하였다.

위의 코드는 실제 쿼리문을 작성하면 다음과 같다.

모델을 통하여 매우 간단하게, DB에 접근할 수 있다.

모델 변경 후

  1. python manage.py makemigrations
  2. python manage.py migrate

명령어를 필수로 입력해야 변경 사항이 반영된다.

생성된 모델 사용

def index(request):
    page = request.GET.get('page', '1')  # 페이지
    question_list = Question.objects.order_by('-create_date')
    paginator = Paginator(question_list, 10)  # 페이지당 10개씩 보여주기
    page_obj = paginator.get_page(page)
    context = {'question_list': page_obj}
    return render(request, 'pybo/question_list.html', context)

실제 모델은 사용자의 요청을 처리하는 views.py에서 사용한다. 위 코드는 그 예시를 표현한 코드이다.

사용자가 index로 접근하면, Question 테이블에서 객체를 날짜별로 역순으로 정렬해 question_list에 담고, 이를 페이지로 나눠 표현한다.

 

참고 문헌

Django

-장고 튜토리얼

[DB] ORM이란 - Heee's Development Blog

ORM 설명 블로그

'back > 장고' 카테고리의 다른 글

NGINX - WSGI - DJANGO  (0) 2023.04.25