TIL 27. Django - App 생성, Model & Migrate

문승준·2021년 9월 16일
0

Django

목록 보기
3/7
post-thumbnail

생성한 App에서 Model을 작성해 Migrate하고, MySQL DB로 변환되는 과정을 알아보자.

ORM의 역할은?

Object-Relational Mapping (객체-관계 매핑)

  • 양립할 수 없는 두 시스템 사이에서 데이터를 전환시켜준다.

  • 객체 지향 프로그램 언어를 사용한다.

  • 프레임워크마다 고유한 ORM을 가지고 있다.

ex) models.py 파일에 작성한 class는 ORM을 통해 sql table을 만들어준다.

ex) DB table 데이터를 파이썬으로 가져오려면?

파이썬 class 형식으로 ORM을 이용해 가져오며 테이블명이 클래스명이다.

products app의 Model 작성하기


1. Branch 준비

  • 새로운 작업의 시작은 main 브랜치에 pull 받기

    → 다른 브랜치에서 받아오면 이전 커밋이 따라오고,
    다른 브랜치가 변경되면 나중에 merge할때 conflict 발생

$ git pull origin main      # 모든 새 작업의 시작은 main을 pull

$ git branch feature/기능명   # 새 브랜치 만들기

$ git checkout feature/기능명 # 만든 브랜치로 이동

# 생성과 동시에 이동하기 / 항상 main 위치에서 생성하자!!!!
$ git checkout -b 브랜치명

2. App 생성

  • products 앱을 만들고 settings에 설정하기
$ python manage.py startapp products
# settings.py

INSTALLED_APPS = [
	products,
]
  • 해당 앱에 대한 추가 설정이 있으면 AppConfig도 추가할 수 있다.

3. Model 작성

  • 작성할 DB테이블 예시 (일대다 관계)

1. models.py -> from django.db import models

2. class 작성하기

  1. djnago.db 라이브러리에서 models 모듈을 import 한다.

  2. DB를 위해 필드 속성명을 변수로 선언하고, field typeoption을 작성한다.

  3. 각 모델 클래스 내부에 meta class를 작성해 필요한 정보를 넣는다.

Model field types

  • CharField(max_length=) : 고정된 길이의 문자열 정의 (최대 길이 지정 필요)

  • IntegerField : 정수값을 저장하고 검증

  • DateField, DateTimeField : 날짜, 날짜시간 정보

  • EmailField : 이메일 주소를 저장하고 검증

  • FileField , ImageField : 파일과 이미지 업로드용

  • AutoField : 자동으로 증가하는 IntegerField. primary key로 자동 추가된다.

  • ForeignKey : 일대다 관계를 지정

  • ManyToManyField : 다대다 관계를 지정

Model Field options

  • help_text : HTML form에 대해 텍스트 라벨 제공

  • verbose_name : 필드 라벨 안에 이름 지어주기 (없으면 필드 이름)

  • null : 기본값 False, True이면 null 값으로 저장가능

  • blank : 기본값 False, True이면 form 양식안에 비우는 것 (유효성 검사시)

  • max_length : 데이터의 최대 길이 지정

  • on_delete : 데이터 삭제시 일어나는 일 정의

    • nullblank의 기본값은 False (허용하지 않음)이며, 문자열 기반 필드에는 null=True를 정의하면 안된다. 데이터가 없는 것에 대해 None빈 문자열 두 개의 값이 나오기 때문이다.
      Null이 아닌 blank로 빈 문자열을 사용하는 것이 Django의 컨벤션이다.
  • blank 옵션을 True로 했다고 빈 문자열이 못들어오는건 아니다!!!!
    "the blank field option is unrelated to the data stored in the database. blank is used solely for form validation of the field."

Meta Data

  • db_table : DB 테이블에서 이름 지정

  • ordering : 레코드 순서를 제어

4. Migrate

  • 작성한 models 파일을 MySQL DB 테이블로 변환하는 과정

1. makemigrations

$ python manage.py makemigrations <app이름>
  • app폴더 내부에 migrations폴더가 생성되고,
    데이터 모델을 관리하는 파일들이 생성된다.
  • model 변경 후 실행될때마다 각 버전의 migrations 파일이 생성된다.

2. migrate

  • migrations 파일을 모두 검토하고 최종적으로 실행한다.
$ python manage.py migrate <app 이름>

-> 첫 앱을 migrate 할때는 app 이름을 명시하지 않는다.

-> migrations 내용을 SQL문으로 변환해서 MySQL DB에 적용한다.

  • ORM이 실행하는 SQL 문장 확인 방법
$ python manage.py showmigrations <app이름>

$ python manage.py sqlmigrate <app이름> <migrations 이름>

# ex) python manage.py sqlmigrate products 0001

MySQL DB에 적용된 테이블 확인하기

mysql> show databases;

mysql> use (DB이름);

mysql> show tables;

mysql> select * from (테이블명);
mysql> desc (테이블명);



profile
개발자가 될 팔자

0개의 댓글