Django

[Django] #11 장고 Model

kinggoddino 2024. 8. 16.

드디어

MTV 중에서 Model 공부하기

 

Model

- 저장할 데이터에 대한 필드와 동작들을 포함한 데이터베이스 구조(laylout)

- 장고는 medel을 이용해서 데이터를 조작함

- 일반적으로 하나의 model은 

 

장고에서 Model 을 만든다

== data 를 저장할 구조와 이 데이터 구조에서 필요한 연산을 적는것.

 

데이터베이스(Database)

장정리된 데이터가 모여있는 것.

 

쿼리(Query)

데이터베이스를 조작할 수 있는 언어.

 

스키마(Schema)

데이터베이스의 구조와 관계등을 정의한 것


Model  만들어보기

 

1. 장고에서 모델은 클래스로 정의한다.

기본구조

# articles/models.py

from django.db import models
class Article(models.Model):
    pass

어떤클래스인지 클래스이름을 적고, models.Model 을 상속받기.

이게 기본구조임

 

이 Article이 하나의 테이블이 되는거고,

이 테이블 안에 들어갈 데이터들을 정의해주면 된다.

 

 

2. 제목과 내용 정의해주기

 

타이틀 정의 :

모델필드는 장고가 미리 정해놨다.

그중에서 character field(문자열) 을 사용한다는거고 반드시 최대길이가 필요하다

 

내용 정의 :

Textfield 로 정의해준다. 최대길이 필요없음

 

이런식으로 각 타입에는 반드시 필요한 옵션이 있을 수 있음. 공식문서에 나와있으니 찾아서 쓰면된다.

 

 

3. 마이그레이션(Migration)

현재 우리는 Model 코드를 python 으로 작성했는데, 데이터베이스는 그 사실을 모르고잇다.

글군.

우리가 작성한 python 코드를 데이터베이스에 반영해줘야하는데 이걸 마이그레이션 이라고 한다.

== 마이그레이션 내용대로 데이터베이스를 조작해줘!

 

마이그레이션 관련 명령어

python manage.py makemigrations # 현재 모델의 변경사항을 마이그레이션으로 생성

이게 생성

python manage.py migrate # DB에 반영되지 않은 마이그레이션을 반영

이게 반영

 

python manage.py showmigration # 마이그레이션 목록과 적용여부를 보여줌

현재 내 마이그레이션 목록이 쭉 나오고

그게 db에 반영이 되어있는지 아닌지를 가시적으로 보여줌.

이건그냥 이런게 잇구나만 보고 넘어가기

python manage.py sqlmigrate <app_name> <migration_no>
# 해당 migration 이 어떤 sql 문을 작성했는지 보여줌

<app_name> 앱에 작성된 <migration_no> 번호의 migration이

실제로 어떤 sql 문으로 변환되었는지를 보여줌.

이것도 그냥 이런게 잇구나만 하고 넘어가기

 

 

실제로 해보자

1.

생성해주면 migrations 폴더 안에 0001_initial.py 라는 파일이 저절로 생성된다

난 title이랑 content 밖에 안만들었는데

만들지도 않은 id 라는것도 들어있다.

 

장고의 모든 모델 클래스는 id 라고 하는 프라이머리 key (PK) 값을 갖고 있다.

내가 따로 지정해주지 않아도 모든 table에는 id이 부여됨.

자동으로 id가 1씩 증가하면서 생성됨

실행해보면 에러 설명창이 뜬다.

19개 마이그레이션 적용 안되었으니까 하라는 뜻.

와웅 코드도 알려주네 매우 친절

 

나 머 만든게 없는데 19개나 잇는 이유 :

장고는 모든것이 갖춰져 잇는 프레임워크다!

내가 안만들엇어도 기본적인 웹 어플리케이션이라면 갖고있어야 할 테이블들을 장고가 내부적으로 갖고잇기 때문이다. 좋아

 

 

 

2. 데이터베이스에 반영

와웅

중간에 있는 articles. 이거 하나 빼고 나머지들은 장고가 갖고있는 테이블들이다.

따라서 장고프로젝  생성하면 최초 한번은 무조건 마이그레이션 해줘야함

 

 

 

장고는 기본적으로 sqlite 데이터베이스를 내장해서 사용하고 있다.

개발시에서는 sqlite 를 사용하다가 추후에 배포할때는 sqlite 가 아니라 실제 내가 만든 db를 사용해. 라고 변경해주는 방식으로 개발하면 됨. 편리!

근데 일단 우리는 sqlite 만 쓸 예정 왜냐면 무지하니까

 

 

'Django' 카테고리의 다른 글

commands - 샘플 커스텀 명령어 만들기  (0) 2024.09.25
[Django] 시험 오답노트  (1) 2024.09.02
[Django] #10 다중앱과 URL  (0) 2024.08.15
[Django] #9 HTTP Form  (0) 2024.08.15
[Django] #8 장고 Template System  (0) 2024.08.14