Database

행행·2022년 6월 5일
0
post-thumbnail
  • 데이터 베이스

    • 체계화된 데이터의 모임
  • 쿼리

    • 데이터를 조회하기 위한 명령어

    • 조건에 맞는 데이터를추출하거나 조작하는 명령어

    • 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의 장점과 단점

    • 장점

      • SQL을 잘 알지 못해도 DB 조작이 가능
      • SQL의 절차적 접근이 아닌 객체 지향적 접근으로 인한 높은 생산성
    • 단점

      • ORM만으로 완전한 서비스를 구현하기 어려움
    • 현대 웹 프레임워크의 요점은 웹 개발의 속도를 높이는 것(생산성)🤣


  • 왜 ORM을 사용하는가

    • 우리는 DB를 객체로 조작하기 위해 ORM을 사용한다.

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

    • django.db.models 모듈의 Model 클래스를 상속받음

    • models 모듈을 통해 어떠한 타입의 DB 컬럼을 정의할 것인지 정의

      • title과 content은 모델의 필드를 나타냄
      • 각 필드는 클래스 속성으로 지정되어 있으며, 각 속성은 각 데이터베이스의 열에 매핑

#articles/models.py

class Articles(models.Model):
	title = models.CharField(max_length=10)
	content = models.TextField()

사용 모델 필드
  • CharField(max_length=10)

  • TextField(**options)

    • 글자의 수가 많을 때 사용
    • max_length 옵션 작성시 자동 양식 필드인 textarea 위젯에

#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
      • 최초 생성일자
      • django ORM이 최초 inset(테이블에 데이터 입력)시에만 현재 날짜와 시간으로 갱신 (테이블에 어떤 값을 최초로 넣을 때)
    • auto_now
      • 최종 수정 일자
      • django ORM이 save를 할 때마다 현재 날짜와 시간으로 갱신

#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)

  • 반드시 기억해야할 migration 3단계
    • 1.models.py
      • 모델 변경사항시
    • $ python manage.py makemigrations
      • migrations 파일 생성
    • $ python manage.py migrate
      • DB반영 (모델과 DB의 동기화)
profile
성장하려고 분투 중인 개발자

0개의 댓글