일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- BFS
- dfs
- 프로그래머스
- python
- 다익스트라
- level1
- 구현
- level0
- DP
- 에라스토테네스의 체
- MYSQL
- 다이나믹 프로그래밍
- 가상메모리 관리
- BOJ
- 가상메모리
- level3
- 파이썬
- 딕셔너리
- N과M
- 스택
- 브루트포스
- 수학
- 그리디
- level2
- 재귀
- 운영체제
- 백준
- programmers
- 힙
- 코딩테스트
- Today
- Total
동캄의 코딩도장
장고 - DB 연동 설정 본문
장고 - DB 연동 설정
django-admin startproject [프로젝트명] 명령어를 통해 장고 프로젝트를 시작했다면,
settings.py 파일도 자동으로 생성된다. 이 파일안에, 연동되는 DATABASES 정보를 저장할 수 있다.
기본적으로 sqlite과 연동되어있고, 필요에따라 POSTGRES, MYSQL등과 연동할 수 있다.
연결 설정은 다음과 같이 할 수 있다.
ORM 이란?
장고 프레임워크는 ORM(Object Relational Mapping, 객체-관계 매핑) 을 지원한다. 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
따라서 장고는 DB에 접근할 때, 쿼리문을 직접 작성하지 않고, 모델(Model)을 이용하여 접근할 수 있고, DB에 간접적으로 접근할 수 있다. (ORM)
장점
- 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
- 재사용 및 유지 보수의 편리성이 증가한다.
- DBMS에 대한 종속성이 줄어든다.
단점
- 완벽한 ORM 만으로 서비스를 구현하기 어렵다.
- 프로시저가 많은 시스템일 경우 객체 지향적인 장점을 활용하기 어렵다
모델 사용 예시
모델을 통해서,
Question 이라는 테이블을 생성하였고, question_text라는 최대 길이가 200인 char 자료형을 가지는 필드와 pub_date 라는 날짜 자료형을 필드를 생성했다.
Choice 라는 톄이쁠을 생성하였고, question 이라는 테이블을 외래키로 삼고, CASCADE 속성을 추가하였다. choice_text라는 최대 길이가 200인 char 자료형을 가지는 필드와 votes라는 기본값으로 정수 0 값을 가지는 정수 자료형 필드를 생성하였다.
위의 코드는 실제 쿼리문을 작성하면 다음과 같다.
모델을 통하여 매우 간단하게, DB에 접근할 수 있다.
모델 변경 후
명령어를 필수로 입력해야 변경 사항이 반영된다.
생성된 모델 사용
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에 담고, 이를 페이지로 나눠 표현한다.
참고 문헌
-장고 튜토리얼
[DB] ORM이란 - Heee's Development Blog
ORM 설명 블로그
'back > 장고' 카테고리의 다른 글
NGINX - WSGI - DJANGO (0) | 2023.04.25 |
---|