2019.04.24 장고 데이터베이스 설치하기
(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)
# 질문에 답하기
- 장고 데이터베이스 설치하기
데이터베이스 설치하기
- 기본적으로 project를 생성하고나면 python manage.py migration을 통해 데이터베이스 생성해주기
- 기본 데이터테이블 생성하기
- 모델 만들기
- 모델을 바탕으로 해당 앱 데이터테이블 생성하기
기본 데이터테이블 생성하기
migrate
- python manage.py migrate
- migrate는 settings/INSTALLED_APPS에 등록되어 있는 앱에 필요한 데이터테이블을 생성한다.
- 따라서 INSTALLED_APPS에 등록되어 있지 않다면 migration 명령이 실행되지 않는다.
관리자 계정 생성하기
- python manage.py createsuperuser
- 비밀번호 변경
- python manage.py chanagepassword [계정명]
모델 만들기
모델 만들기
- DB에 어떤 데이터를 어떤 형식으로 저장할 것인가?
- 모델 이름 : 테이블 이름
- 모델의 필드 : 컬럼
- 컬럼은 데이터의 형식 , 제약 조건
- 형식 : 정수, 실수, 글자, 길이없는 텍스트, 날짜 등
- 원래 SQL 언어로 작성을 하여야 하나 model에 클래스를 통해 작성할 수 있다.
- 모델을 사용하면서 장고에서 주는 이점 중 또 한개는 이렇게 모델에 만들어 놓으면 제약조건에 대한 부분을 프론트에 자동으로 만들어 준다.
- 프론트에서 사용하는 폼 태그의 종류와 제약 조건을 제시해준다.
- 해당 앱의 데이터베이스 구조를 어떻게 구성할 것인가?
- 이 모델에 따라서 데이터테이블이 생성된다.
polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
- Question이라는 모델에는 question_text 와 pub_date가 들어가고 각각의 필드(조건)들로 구성된다.
- Choice라는 모델은 question , choice_text, votes로 구성된다.
해당 데이터테이블 변경사항 추적하기 : 모델을 읽어서 DB에 반영할 사항 확인
- migrate를 해줘야하는데 migrate는 settings/INSTALLED_APPS에 등록되어 있는 앱에 필요한 데이터테이블을 생성한다.
- 따라서 먼저 settings/INSTALLED_APPS에 polls를 등록해준다.
- 해당 앱에 대한 migration을 만들어준다.
- python manage.py makemigrations polls
- 해당 앱에 대한 migration을 실시 해준다.
변경 사항 등록하기 : 변경 사항 파일을 읽어서 쿼리 실행
- python manage.py migrate polls 0001
- python manage.py migrate만해도 되지만 polls와 0001을 넣는 이유
- 한 프로젝트 안에서 다른 사람이 만들고 있는 내용도 같이 반영이 될 수 있음
변경사항 확인하기
- polls/migrations에 보면 변경사항들이 나온다.
- 장고는 DB 의존성이 낮다.
- 의존성 : ~ 에 대한 의존성이 높다는 것은 ~가 아니면 정상 동작하지 않는다.
- 예) 삼성 리모컨, lg 리모컨
- 의존성 : ~ 에 대한 의존성이 높다는 것은 ~가 아니면 정상 동작하지 않는다.
- 어떤 쿼리가 실행될지 알고 싶다면
- python manage.py sqlmigrate polls 0001
- 어떤 쿼리가 실행될지 알고 싶다
- slow 쿼리인지 여부 확인
- 튜닝이 필요한 쿼리인지 여부 확인할 때 사용한다.