본문 바로가기
  • 살짝 구운 김 유나
Web/Django

Django Model 1

by yunae 2022. 8. 31.

Model

: 데이터베이스에 접속하고 관리

- Model과 DB는 절대 같지 않음, DB와 소통하는 것!

 

 

 

Model 작성하기

1. 새 프로젝트(crud), 앱(articles) 작성 및 앱 등록

$ django-admin startproject 프로젝트명 .

$ python manage.py startapp 애플리케이션

-> 이 후에 settings.py에 애플리케이션 등록해주기 !

 

 

2. models.py 작성

- 모델 클래스를 작성하는 것은 DB 테이블의 스키마를 정의하는 것

" 모델 클래스 == 테이블 스키마 "

-> id 컬럼은 테이블 생성 시 자동으로 생성

class Article(models.Model):

각 모델은 django.models.Model 클래스의 서브 클래스로 표현된디.

- 클래스 상속 기반 형태의 Django 프레임워크 개발, 잘만들어진 것 가져다가 쓰자,,

 

title = models.CharField(max_length=10)
content = models.TextField()

models 모듈을 통해 어떠한 타입의 DB 필드를 정의할 것인지 정의- 클래스 변수 title과 content는 DB 필드를 나타냄

 

 

지금까지 작성한 models.py는 다음과 같은 데이터베이스 스키마를 설계한 것--> 이제 데이터베이스에 테이블을 생성하기 위한 설계도 작성이 필요!

column Data type
title VARCHAR(10)
content TEXT

 

 

 

 

Migrations

: 모델에 대한 청사진을 만들고 이를 통해 테이블을 생성하는 일련의 과정

- Django가 모델에 생긴 변화를 DB에 반영하는 방법

 

 

1. makemigrations

테이블을 만들기 위한 설계도 생성

$ python manage.py makemigrations

명령어 실행 후 0001_initial.py(파이썬으로 작성된 설계도)가 생성된 것을 확인할 수 있음

 

 

 

2. migrate

makemigrations로 만든 설계도를 실제 db.sqlite3 DB 파일에 반영하는 과정

= "모델과 DB의 동기화"

$ python manage.py migrate

 

 

[잠고] Migrations 기타 명령어

1. showmigrations

$ python manage.py showmigrations

migrations 파일들이 migrate 됐는지 안됐는지의 여부를 확인하는 용도

[X] 표시가 있으면 migrate가 완료되었음을 의미

 

2. sqlmigrate

$ python manage.py sqlmigrate 앱이름 0001

해당 migrations 파일이 SQL 문으로 어떻게 해석 될 지 미리 확인할 수 있음

 

 

 

" 추가 필드 정의 " - Model 변경사항 반영하기

- 기존 컬럼을 가진 테이블에 2개의 컬럼이 추가되는 상황

 

- Django 입장에서는 이미 존재하는 테이블에 새로운 컬럼이 추가되는 요구사항을 받았는데, 이 컬럼들은 기본적으로 빈 값으로 추가될 수 없음

-> 그래서 Django는 우리에게 추가되는 컬럼에 대한 기본 값을 설정해야 하니 어떻게 어떤 값을 설정할 것인지 물어보는 과정을 진행

1) 다음 화면으로 넘어가서 새 컬럼의 기본 값을 직접 입력하는 방법

2) 현재 과정에서 나가고 모델 필드에 default 속성을 직접 작성하는 방법

 

 

다음 화면에서 아무것도 입력하지 않고 enter를 입력하면

Django에서 기본적으로 파이썬의 timezone 모듈의 now 메서드 반환값을 기본으로 사용하도록 해줌

새로운 설계도가 만들어 진 것을 확인

-> 새로운 설계도를 생성했기 때문에 DB와 동기화를 진행해야 함

$ python manage.py migrate

 

 

반드시 기억해야 할 migration 3단계

1. models.py에서 변경사항이 발생하면
2. migrations 파일 생성 (설계도 생성) -> makemigrations
3. DB 반영 ( 모델과 DB의 동기화) -> migrate

 

 

 

ORM

(= Object-Relational-Mapping )

: 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 (Django <-> SQL) 데이터를 변환하는 프로그래밍 기술

 

장점)

- SQL을 잘 알지 못해도 객체지향 언어로 DB 조작이 가능

- 객체 지향적 접근으로 인한 높은 생산성

단점)

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

 

 

 

하늘 봐봐요. 라는 말에 벌떡 일어나서 찍은 사진.

행복해지는 방법이 나와 꽤 비슷한 사람... 과의 대화만큼 즐거운 일이 없다 요새는.

 

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

Django Model 2 - QuerySet API  (0) 2022.09.02
Form Data 보내고 가져오기  (0) 2022.09.02
Templates Inheritance  (0) 2022.09.01
Django 시작하기  (0) 2022.08.30
Django 이해하기  (0) 2022.08.30

댓글