Django

Django의 Model과 ORM

체리1001 2021. 8. 23.

django의 model은

데이터의 구조를 잡아주고 정의된 구조를 기반으로 데이터베이스와 소통을 한다.

 

Django에서는 Python을 사용해서 데이터베이스와 소통할 수 있도록

Model이 ORM(Object-Relational Mapper)을 제공하고 있다.

 

원래 데이터베이스와 소통하기 위해서는 SQL 코드를 작성해야 하는데

ORM을 쓰면 Python을 사용해서 데이터베이스와 소통할 수 있다. 

 

서비스의 요구사항에 맞게 데이터의 구조를 model에 정의한 뒤

알맞은 Python 코드를 작성하면 Django는 그것을 SQL 코드로 바꿔서 데이터베이스와 소통할 수 있게 해준다.

 

데이터베이스 사용을 위해 SQL 코드를 따로 작성하지 않고 

익숙한 Python 코드를 통해 소통할 수 있기 때문에 개발 효율을 높여준다. 

 

 

모든 모델은 class로 구성이 된다. 

model에 class를 작성하기 전에 우리가 사용할 데이터를 확인해보고, 데이터 모델링을 한 뒤

각 데이터에 맞는 Field를 작성해주면 된다.  

from django.db import models

# Create your models here.
class Menu(models.Model):
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=100)
    price = models.IntegerField()
    img_path = models.CharField(max_length=255)

    def __str__(self): 
        return self.name
        
    #__str__ 함수는 어떤 값 또는 객체를 문자열로 변환하는 함수이다. print(객체이름)을 썼을 때 결과로 나오는 문자열!!

CharField(max_length=None)

제한된 길이의 문자열을 위한 필드.

max_length 값이 필수 인자이며 입력할 최대 길이를 설정한다.

 

IntegerField()

정수 값을 위한 필드. -2147483645 ~ 2147483647 범위를 지원한다.

 

BooleanField()

Boolean 값을 위한 필드.

 

DateField(auto_now=False, auto_now_add=False)

파이썬의 datetime.date 객체 형태로 표시되는 날짜 필드.

auto_now: true로 설정되면 해당 객체가 변경될 때마다 자동으로 필드 값을 지금으로 수정한다.

(마지막 수정 시간 같은 항목으로 사용하면 좋다.)

auto_now_add: 모델이 처음 생성될 때 한번, 자동으로 필드 값을 지금으로 설정한다.

(생성된 시간을 저장하기 위해 많이 사용한다.)

 

DateTimeField(auto_now=False, auto_now_add=False)

파이썬의 datetime.datetime 객체 형태로 표시되는 날짜 필드.

 

EmailField(max_length=254)

CharField의 하위 클래스로 문자열이 이용 가능한 이메일 주소인지 EmailValidator를 통해 확인한다.

 

FileField(upload_to=None, max_length=100)

파일 업로드를 위한 필드.

upload_to: 업로드될 경로를 지정하는 필드로 Storage.save() 함수로 값이 전달되어 저장된다.

 

ImageField(upload_to=None, height_field=None, width_field=None, max_length=100)

FileField를 상속하여 구현되는 파일 업로드를 위한 필드.

기본적으로 최대 길이가 100인 문자열 형식으로 생성된다.

FileField에서 업로드된 파일이 정상적인 이미지 파일인지 확인하는 과정이 추가된 필드로 이미지 처리를 위한 Pillow 라이브러리가 필수적으로 필요하다.

height_field, width_field는 객체가 저장될 때 이미지의 높이와 너비값이 자동으로 채워진다.

 

 

그 후 모델이 생성되거나 변경되었다면 꼭 django에게 알려줘야 한다.

python manage.py makemigrations
python manage.py migrate

migration: 데이터베이스 변경사항에 대한 버전 컨트롤 시스템

변경사항을 저장해둔 목록이라고 생각하면 된다.

 

만든 migration을 실제 데이터베이스에 적용하는 것이 migrate

 

makemigrations를 통해 만든 파일을 보면

(migrations 디렉토리에 있음)

내가 만들지 않은 id 값이 보이는데, 이것은 장고에서 자동으로 생성해주는 필드로

각각의 데이터를 구분하기 위한 고유값이다.

 

 

이렇게 파이썬으로 작성한 코드는 ORM을 통해 SQL로 바뀌게 되는데

SQL로 어떻게 바뀐지 보고싶다면 아래의 명령어를 사용하면 된다.

python manage.py sqlmigrate 앱이름 번호

이렇게 적어주면 파이썬으로 작성한 코드가 어떤 SQL 코드로 바뀌었는지 확인할 수 있다.

 

 

현재 생성되어있는 migration의 목록을 보고 싶으면 아래의 명령어를 사용하면 된다.

python manage.py showmigrations

X라고 나온 것은 이미 장고에 반영이 되었다는 뜻이다.

 

'Django' 카테고리의 다른 글

Django 배포 준비  (0) 2021.08.24
Django shell을 이용한 model CRUD  (0) 2021.08.23
상태 코드  (0) 2021.08.19
Django 우아한 URL  (0) 2021.08.18
Django Template Language  (0) 2021.08.15

댓글