[Django] Model

작성:    

업데이트:

카테고리:

태그: ,

Model

  • 구조화된, 통합된 데이터에 대한 정보
  • 사용자가 저장하는 데이터들의 필수적인 필드와 동작 포함
  • 저장된 DB 구조(layout)
  • django에서 데이터에 접속하고 관리하는 공간
  • 일반적으로 각각의 model은 하나의 DB 테이블에 mapping


DB

  • 체계화된, 통일된 형태의 데이터의 모임
  • 패턴에 따라 데이터 조작이 간편


Query

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


DB의 구조

스키마(Schema)

  • DB에서 자료의 구조, 표현방법, 관계, 제약조건 등을 정의한 구조(structure)
  • 전반적인 명세
column datatype
id INT
age INT
phone TEXT
email TEXT


테이블(Table)

  • 열(column) : 필드(field) or 속성, 동일한 데이터 형식(INTEGER, TEXT, NULL…)
  • 행(row) : 레코드(record) or 튜플
  • 테이블에 저장되는 값들이 데이터
  • SQL DB에서는 테이블을 관계 라고도 한다.


기본키(PK; Primary Key)

  • 각 행(레코드)의 고유한 값
  • 반드시 설정해야 한다.
  • DB관리 및 관계 설정 시 주요하게 활용


ORM

  • Object Relational Mapping
  • OOP 언어를 사용하여 호환되지 않는 유형의 시스템간 데이터 변환
  • OOP에서 RDMS 연동 시, DB와 OOP 언어 간의 호환되지 않는 데이터 변환
  • Django는 내장 Django ORM 사용

RDMS의 데이터와 Python(django)의 데이터가 서로 바뀔 수 있게 해주는 수단

DB를 객체(object)로 조작하기 위해 ORM 사용!!


장단점

장점

  • SQL을 몰라도 DB 조작 가능
  • SQL의 절차적 접근이 아닌 객체 지향적 접근 가능
  • 잘 아는 언어의 사용 → 웹 개발속도 UP → 높은 생산성!


단점

  • ORM 만으로 완전한 서비스를 구현하기 어려운 경우가 있다.


models.py 작성

# articles/models.py

class Article(models.Model):
    title = models.CharField(max_length=10)  # CharField : 길이가 짧은 것에 사용
    content = models.TextField()             # TextField : 길이가 긴 것에 사용
  • 각각의 app의 models.py에 DB 스키마에 대응하는 클래스를 정의

  • DB 컬럼과 어떠한 타입으로 정의할 것인지에 대해 django.db라는 모듈의 models를 상속
  • 즉, 각 모델은 django.db.models.Model 클래스의 서브 클래스로 표현

  • title과 content는 모델의 필드
  • 각 필드는 클래스 속성으로 지정, 각 속성은 각 DB의 열에 mapping


CharField

  • CharField(max_length=None, **options)
  • 길이의 제한이 있는 짧은 문자열
  • max_length는 필수!
  • 필드의 최대 길이(문자), DB 레벨과 Django의 유효성 검사(값 검증)에서 활용


TextField

  • TextField(**options)
  • 긴 문자열에서 사용
  • max_length 옵션 작성은 가능, But 자동 양식 필드인 textarea 위젯에 반영은 되지만, 모델과 DB 수준에는 적용 X
  • max_length 사용은 CharField에서만!

댓글남기기