본문 바로가기
PROGRAMMING/Django

[Django] Model, DB, Migration

by 안녕나는현서 2021. 9. 3.
728x90

Model

  • 웹 애플리케이션의 데이터를 구조화하고 조작하기 위한 도구
  • 저장된 데이터베이스의 구조(layout)
  • django는 model를 통해 데이터베이스에 접속하고 관리
  • 일반적으로 각각의 model은 하나의 데이터베이스 테이블에 매핑 됨

 

Database

- 데이터베이스(DB)

  • 체계화된 데이터의 모임

- 쿼리(Query)

  • 데이터를 조회하기 위한 명령어
  • 조건에 맞는 데이터를 추출하거나 조작하는 명령어
  • 쿼리를 날린다. == DB를 조작한다.

- 스키마(Schema)

  • 데이터베이스에서 자료의 구조, 표현 방법, 관계 등을 정의한 구조 (structure)

- 테이블(Table)

  • 열과 행의 모델을 사용해 조작된 데이터 요소들의 집합
  • SQL 데이터베이스에서는 테이블을 관계라고도 함
  • 열 : 컬럼(column) / 필드(field) / 속성
    • 각 열에는 고유한 데이터 형식이 지정됨
    • INTEGER, TEXT, NULL 등
  • 행 : 로우(row) / 레코드(record) / 값 / 튜플
    • 테이블의 데이터는 행에 저장됨
    • 즉, user 테이블에 4명의 고객정보가 저장되어 있으며, 행은 4개가 존재한다.
  • PK(기본 키) 
    • 각 행의 고유 값으로 Primary Key
    • 반드시 설정하여야하며, 데이터베이스 관리 및 관계 설정 시 주요하게 활용됨

 

[model 만들고 db에 반영하기]

1. model.py 작성

# articles > models.py

from django.db import models

# 하나의 클래스가 각각 하나의 스키마가 됨
class Article_model(models.Model):
    # 각각의 변수가 모델의 필드(열, 컬럼)
    title = models.CharField(max_length=10)
    content = models.TextField()
  • DB 컬럼과 어떠한 타입으로 정의할 것인지 django.db 모듈의 models를 상속
    • 각 모델은 django.db.models.Model 클래스의 서브 클래스로 표현
  • title과 content는 모델의 필드
  • CharField(max_lenght=None, **options)
    • 길이의 제한이 있는 문자열을 넣을 때 사용
    • max_length는 필수 인자
    • 필드의 최대 길이, 데이터베이스 레벨과 Django의 유효성 검사(값을 검증하는 것)에서 활용
  • TextField(**options)
    • 글자의 수가 많을 때 사용
    • max_length 옵션 작성시 자동 양식 필드인 textarea 위젯에 반영은 되지만 모델과 데이터베이스 수준에는 적용되지 않음 → 따라서 max_length 사용은 CharField에서!

2. Migrations

  • django가 model에 생긴 변화를 반영하는 방법

- Migrations Commands

  1. makemigrations
    • model을 변경한 것에 기반한 새로운 마이그레이션(like 설계도)을 만들 때 사용
      $ python manage.py makemigrations​

  2. migrate
    • 마이그레이션을 DB에 반영하기 위해 사용
    • 설계도를 실제 DB에 반영하는 과정
    • 모델에서의 변경 사항들과 DB 스키마가 동기화를 이룸
      $ python manage.py migrate​
    • 실제로 DB에 반영됐는지 SQLite 확장프로그램 설치 후 확인 가능
  3. sqlmigrate
    • 마이그레이션에 대한 SQL 구문을 보기 위해 사용
    • 마이그레이션이 SQL문으로 어떻게 해석되어서 동작할 지 미리 확인할 수 있음
      $ python manage.py sqlmigrate articles 0001
      
      -- 출력 --
      BEGIN;
      --
      -- Create model Article_model
      --
      CREATE TABLE "articles_article_model" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(10) NOT NULL, "content" text NOT NULL);
      COMMIT;​
  4. showmigrations
    • 프로젝트 전체의 마이그레이션 상태를 확인하기 위해 사용
    • 마이그레이션 파일들이 migrate 됐는지 확인할 수 있음
      $ python manage.py showmigrations​



3. 모델 수정하기

# articles > models.py

class Article_model(models.Model):
    title = models.CharField(max_length=10)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
  • auto_now_add : 최초 생성 일자
  • auto_now : 최종 수정 일자
$ python manage.py makemigrations
$ python manage.py migrate

728x90

'PROGRAMMING > Django' 카테고리의 다른 글

[Django] Admin Page  (0) 2021.09.06
[Django] Django ORM, CRUD  (0) 2021.09.03
[Django] URL, namespace  (0) 2021.09.02
[Django] HTML Form  (0) 2021.09.02
[Django] DTL(Django Template Language), Template 상속  (0) 2021.09.02

댓글