Django(장고) Model 클래스 & ORM

장현웅·2023년 9월 4일
0

데이터 Model

  • DB에 저장되는 데이터.
  • 장고에서 제공하는 ORM(Object-Relational Mapping)기능을 사용하여 각 앱은 DB에 클래스 형식으로 저장한 모델 데이터를 DB의 테이블과 열, 행로 표현해줄 수 있다.

ORM(Object Relational Mapping)

객체 관계 매핑(ORM, Object-Relational Mapping)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 데이터를 변환하는 프로그래밍 기술이다.

  • Mapping : 하나의 값을 다른 값으로 대응시킴
  1. 객체 생성
  • 모델 클래스는 데이터베이스 테이블을 나타낸다.
  • 해당 클래스의 속성은 테이블의 열(필드, column)를 나타내고, 인스턴스는 데이터베이스 테이블의 특정 레코드(행, row)를 나타낸다.
  1. 객체 지향 쿼리
    SQL 대신 간결한 python 코드로 쿼리를 작성할 수 있다.
  2. CRUD작업
    ORM은 데이터베이스에서의 기본 작업인 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete) 작업을 추상화하고 이를 객체 메서드로 제공하여 데이터 조작 코드가 더 간단하다.

Django - 데이터 모델 참고


다음은 User 앱 Model 클래스의 예제이다.

from django.db import models								# # Django의 models 모듈을 models.py에 가져온다.


class UserModel(models.Model):								# 'UserModel' Model 클래스는 models 모듈의 Model 클래스를 상속. 
															# Django의 models 모듈에서 Model 클래스를 상속 받았으니 Django의 ORM 프로그램을 사용하여 DB와 상호작용할 수 있다.
    class Meta:
        db_table = "my_user"								# 이 Model 클래스의 db에서 테이블 명이 "my_user"이다.

    username = models.CharField(max_length=20, null=False)	# models 모듈을 이용한 Model 클래스 속성의 필드 타입 정의
    password = models.CharField(max_length=256, null=False)	# 속성을 나타내는 변수들은 db에서 열(필드, column)에 해당한다.
    bio = models.CharField(max_length=256, default='')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)		# 클라이언트가 제공한 각 속성 값들이 들어간 Model 클래스의 인스턴스는 db에서 행(row)에 해당한다.


다음은 Django에서 자주 사용되는 대표적인 Model 클래스 속성의 필드 타입에 대한 정리이다.

- CharField

CharField는 짧은 문자열을 저장하기 위한 필드
max_length 매개변수로 최대 문자열 길이를 지정해야 한다.
예: models.CharField(max_length=100)

- IntegerField:

IntegerField는 정수 값을 저장하는 데 사용된다.
예: models.IntegerField()

- FloatField:

FloatField는 부동 소수점 수를 저장하는 데 사용된다.
예: models.FloatField()

- DateField:

DateField는 날짜를 저장하는 데 사용된다.
예: models.DateField()

- TimeField:

TimeField는 시간을 저장하는 데 사용된다.
예: models.TimeField()

- DateTimeField:

DateTimeField는 날짜와 시간을 저장하는 데 사용된다.
예: models.DateTimeField()

- BooleanField:

BooleanField는 참(True) 또는 거짓(False) 값을 저장하는 필드
예: models.BooleanField(default=False)

- EmailField:

EmailField는 이메일 주소를 저장하는 데 사용된다. 
입력 값이 유효한 이메일 형식이어야 한다.
예: models.EmailField(max_length=100)

- ImageField:

ImageField는 이미지 파일을 저장하는 데 사용된다. 
파일 업로드 기능과 함께 사용된다.
예: models.ImageField(upload_to='images/')

- ForeignKey:

ForeignKey는 다른 모델과의 관계를 표현하는 필드
다른 모델의 인스턴스와 관련되어 있음을 나타낸다.
예: models.ForeignKey(related_name='posts', to='Author')

- ManyToManyField:

ManyToManyField는 다대다(Many-to-Many) 관계를 표현하는 필드 
여러 모델 인스턴스 간의 관계를 나타낸다.
예: models.ManyToManyField(related_name='tags', to='Tag')

- SlugField:

SlugField는 URL에 사용할 수 있는 문자열을 저장하는 필드 
주로 블로그 글이나 게시물의 제목을 URL 친화적인 형태로 저장할 때 사용된다.
예: models.SlugField(max_length=50, unique=True)

- AutoField:

AutoField는 자동으로 증가하는 숫자 필드
주로 데이터베이스의 기본 키(primary key)로 사용된다.

0개의 댓글