데이터 베이스
쿼리
데이터를 조회
하기 위한 명령어
조건에 맞는 데이터를추출
하거나 조작
하는 명령어
Query를 날린다 -> DB를 조작한다.
스키마
정의
한 구조(structure)테이블
열과 행의 모델을 사용해 조직된 데이터 요소들의 집합, SQL데이터 베이스에서는 테이블을 관계 라고도 한다.
열(column) : 필드(field) or 속성
x축
행(row) : 레코드(record) or 튜플
y축
기본키(PK)
각 행의 고유값
으로 Primary Key로 불린다. 반드시 설정하여야하며, 데이터베이스 관리 및 관계 설정시 주요하게 활용된다.
모델
단일한 데이터에 대한 정보를 가짐
저장된 데이터베이스의 구조(layout)
Django는 model
을 통해 데이터에 접속하고 관리
일반적으로 각각의 model은 하나의 데이터베이스 테이블에 매핑 됨
ORM
Object-Relational-Mapping
객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템간에 (Django-SQL) 데이터를 변환하는 프로그래밍 기술
OOP 프로그래밍에서 RDBMS을 연동할 때, 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
django는 내장 django ORM을 사용함
ORM의 장점과 단점
장점
단점
현대 웹 프레임워크의 요점은 웹 개발의 속도를 높이는 것(생산성)🤣
왜 ORM을 사용하는가
각 모델은 django.models.Model 클래스의 서브 클래스로 표현됨
django.db.models 모듈의 Model 클래스를 상속받음
models 모듈을 통해 어떠한 타입의 DB 컬럼을 정의할 것인지 정의
필드
를 나타냄매핑
#articles/models.py
class Articles(models.Model):
title = models.CharField(max_length=10)
content = models.TextField()
CharField(max_length=10)
TextField(**options)
#articles/models.py
from django.db import models
# Create your models here.
# 장고의 데이터 베이스
class Article(models.Model):
title = models.CharField(max_length=10)
content = models.TextField()
Migrations
Django가 model에 생긴 변화를 반영
하는 방법
Migration 실행 및 DB 스키마를 다루기 위한 몇가지 명령어
앞에 python manage.py +
makemigrations
model을 변경
한 것에 기반한 새로운 migration 생성
app/migrations/__init__.py
이 살아있어야 함
추가 모델 필드 작성 후 makemigrations
진행
migrate
마이그레이션을 DB에 반영
하기 위해 사용
설계도를 DB에 반영하는 과정
모델에서의 변경 사항들과 DB의 스키마
sqlmigrate
마이그레이션에 대한 SQL 구문
을 보기 위해 사용
마이그레이션이 SQL 문으로 어떻게 해석되어서 동작할지 미리 확인
할 수 있음
showmigrate
프로젝트 전체의 마이그레이션 상태를 확인
하기 위해 사용
마이그레이션 파일들이 migrate 됐는지 안됐는지 여부를 확인할 수 있음
$ python manage.py makemigrations
migrations/0001_initial.py
생성 확인$ python manage.py makemigrations
Migrations for 'articles':
articles\migrations\0001_initial.py
- Create model Article
(venv)
0001_initial.py
설계도를 실제 DB에 반영
migrations의 init - (연결) -migration - (연결) - db.sqlite3
DataField's options
auto_now_add
auto_now
#articles/models.py
class Article(models.Model):
#title 기록가능
title = models.CharField(max_length=10)
#content 기록가능
content = models.TextField()
#시간 자동생성
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
models.py
$ python manage.py makemigrations
$ python manage.py migrate