WEB

[Django 06] Model

mhko411 2021. 3. 10. 12:47
728x90

Django는 MTV 패턴을 갖고있으며 그 중 Model은 저장된 데이터의 구조를 의미하며 Python 객체를 통해 데이터에 접근하고 관리한다.


데이터베이스의 구조

스키마 : 데이터베이스 내에 데이터들이 어떠한 구조로 저장이 되는지를 명세한 것

테이블 : 행과 열로 정렬된 데이터의 집합

행 : 가로에 있는 데이터들로 테이블의 데이터를 행에 저장한다.

열 : 세로에 있는 데이터들로 같은 열에 있는 데이터는 같은 데이터 형식을 갖는다.

기본키 : 각 행을 구별하는 Primary Key인 기본 키가 존재하며 Django에서는 자동적으로 생성해준다.

ORM

모델을 알아보기 전에 ORM을 먼저 이해해야 한다. ORM은 객체-관계 매핑으로 객체지향 언어에서 클래스로 정의한 객체와 관계형 데이터베이스에서 테이블을 자동으로 매핑하는 것이다. 

따라서 객체지향 언어를 사용하여 SQL문을 사용할 수 있도록 중간에 변환을 해주는 역할을 하며 SQL문을 몰라도 테이블을 생성하고 데이터에 접근, 조작할 수 있다.

 

아래의 그림은 Django에서 ORM의 흐름을 나타낸 것이다. 클래스를 통해 객체를 생성하며 이를 makemigrations라는 명령어를 통해 DB에 전달하기위한 설계도를 만든다. 이후 migrate를 통해 실제 DB에 저장되는 형태로 변환하여 전달한다.

 

 

모델 정의하기

Django에서 모델은 애플리케이션의 models.py에서 정의한다. models.py from django.db import models 이라는 모듈을 통해 MODEL의 클래스를 상속받아 테이블의 구조를 잡는다.

 

게시판 생성을 위한 객체를 생성해보자.

제목(title)과 내용(content), 생성된 시간과 수정된 시간이라는 데이터를 저장할 수 있도록 4개의 열을 생성하였다. 각각의 데이터형은 models안에 있는 클래스로 가져온다. (models 다음에 오는 것이 데이터 형) 열에는 같은 데이터형을 저장하게된다.

class Board(models.Model):
    title = models.CharField(max_length=20)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

 

makemigrations

클래스로 객체를 정의했다면 DB에 보내기위한 설계도를 작성해야한다. 위에서 구성한 클래스를 다음 명령을 통해 migrations를 만들게된다. 이 명령을 통해 애플리케이션의 migrations 폴더에 설계도가 생성된다.

$ python manage.py makemigrations

migrate

이후 설계도를 DB에 맞게 변환을 해주어야하며 migrate를 통해 변환을 하여 DB에 데이터가 저장되도록 한다.

$ python manage.py migrate

 

'WEB' 카테고리의 다른 글

[Django 08] Forms  (0) 2021.03.16
[Django 07] CRUD  (0) 2021.03.11
[Django 05] form 사용하기  (0) 2021.03.09
[Django 04] URL 분리하기  (0) 2021.03.09
[Django 03] 템플릿 상속  (0) 2021.03.08