backend/Django&Python

[Django] DB설치하기 migration 익히기

findTheValue 2021. 8. 25. 02:50

첫 번째 장고 앱 작성하기, part 2

DB 설치하기

Django는 기본적으로 SQLite를 사용하도록 구성 되어 있다. 기본 제공 데이터베이스고 나중에 실 프로젝트 할때는 좀 더 확장석 있는 데이터 베이스를 사용하는 것이 좋다.DB바인딩

후 DATABASES default항목값 ENGINE, NAME 등 키 값 성정하기.DATABASES

SQLite는 DB파일이 필요할 때마다 자동생성되나 타 DB는 DB 생성 따로 해줄 것.

  • my-site/settings.py에서 TIME_ZONE값 설정 할 것.
    • 기본값은 USE_TZ이므로 검색해가서 수동설정할 것.
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

세팅창 기본제공 App들이 있는데 다음과 같음.

  • admin : 관리용 사이트
  • auth : 인증 시스템
  • contenttypes : 컨텐츠 타입을 위한 프레임워크
  • sessions : 세션 프레임워크
  • messages : 메세징 프레임워크
  • staticfiles : 정적 파일을 관리하는 프레임워크
  • polls줄은 앱을 현재 프로젝트에 포함시키겠다는 구문.
# settings.py의 DB설정과 마이그레이션에 따라 DB테이블을 자동생성해준다.
python manage.py migrate
# SHOW TABLES;.schemaSELECT TABLE_NAME FROM USER_TABLES;

모델 만들기

  • 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)
  • DB의 필드와 동작을 포함한다.
  • DRY원칙에 따른 정규화를 추구한다.
  • 객체생성
import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    # 객체 표현을 위한 str
    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

# 관계설정을 위한 
# 각각의 Choice가 하나의 Question에 대응.
# CASCADE는 계산식 삭제 형식.
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text
  • DB의 각 필드는 Field클래스의 인스턴스로 표현됨.
  • CharField 는 문자필드(필수인수max_length), DateTimeField는 날짜와 시간 필드.
  • 이는 Django에게 각 필드가 어떤 자료형을 가질것인지를 선언함.
  • 기계가 읽기 좋은 형식과 사람이 읽기좋은 형식에 대해 공부해보기.
  • Foreign Key

모델 활성화

$ python manage.py makemigrations polls

로 CREATE TABLE함.

migration은 Django가 모델과 DB스키마에 대한 변경사항을 저장하는 방법.

migrations에 저장된느 파일이고 수동으로 조정할 수 있음.

migrate와 sqlmigrate 명령에 대해 공부해보기

python manage.py sqlmigrate polls 0001

을 통해 가상으로 DB migration을 화면에 인쇄해줌.

python manage.py migrate

아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행함

  • 장고는 django_migrations테이블을 두어 migtation적용 여부를 추적함.
  • 모델에서의 변경사항들과 DB스키마의 동기화가 이루어짐.
  • 동작중인 DB를 자료 손실없이 업데이트하는데 최적화 된 강력한 기능.
  • 3가지 절차를 기억
  • 만드는 명령과 적용하는 명령이 분리된 것은 버전관리 시스템에 migration을 커밋할 수 있도록 하기 위함.(개발의 용이성을 위함)

API 다루기

python manage.py shell

관리자 생성

python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
from django.contrib import admin

from .models import Question

admin.site.register(Question)
  • CRUD의 수행이 가능.