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는 모델의 필드
- https://docs.djangoproject.com/en/3.2/ref/models/fields/#django.db.models.CharField
- 각 필드는 클래스 속성으로 지정되어 있으며, 각 속성은 데이터베이스의 열에 매핑
- CharField(max_lenght=None, **options)
- 길이의 제한이 있는 문자열을 넣을 때 사용
- max_length는 필수 인자
- 필드의 최대 길이, 데이터베이스 레벨과 Django의 유효성 검사(값을 검증하는 것)에서 활용
- TextField(**options)
- 글자의 수가 많을 때 사용
- max_length 옵션 작성시 자동 양식 필드인 textarea 위젯에 반영은 되지만 모델과 데이터베이스 수준에는 적용되지 않음 → 따라서 max_length 사용은 CharField에서!
2. Migrations
- django가 model에 생긴 변화를 반영하는 방법
- Migrations Commands
- makemigrations
- model을 변경한 것에 기반한 새로운 마이그레이션(like 설계도)을 만들 때 사용
$ python manage.py makemigrations
- model을 변경한 것에 기반한 새로운 마이그레이션(like 설계도)을 만들 때 사용
- migrate
- 마이그레이션을 DB에 반영하기 위해 사용
- 설계도를 실제 DB에 반영하는 과정
- 모델에서의 변경 사항들과 DB 스키마가 동기화를 이룸
$ python manage.py migrate
- 실제로 DB에 반영됐는지 SQLite 확장프로그램 설치 후 확인 가능
- 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;
- 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 |
댓글