생성한 App에서 Model을 작성해 Migrate하고, MySQL DB로 변환되는 과정을 알아보자.
Object-Relational Mapping (객체-관계 매핑)
양립할 수 없는 두 시스템 사이에서 데이터를 전환시켜준다.
객체 지향 프로그램 언어를 사용한다.
프레임워크마다 고유한 ORM을 가지고 있다.
ex) models.py 파일에 작성한 class는 ORM을 통해 sql table을 만들어준다.
ex) DB table 데이터를 파이썬으로 가져오려면?
파이썬 class 형식으로 ORM을 이용해 가져오며 테이블명이 클래스명이다.
새로운 작업의 시작은 main 브랜치에 pull 받기
→ 다른 브랜치에서 받아오면 이전 커밋이 따라오고,
다른 브랜치가 변경되면 나중에 merge할때 conflict 발생
$ git pull origin main # 모든 새 작업의 시작은 main을 pull
$ git branch feature/기능명 # 새 브랜치 만들기
$ git checkout feature/기능명 # 만든 브랜치로 이동
# 생성과 동시에 이동하기 / 항상 main 위치에서 생성하자!!!!
$ git checkout -b 브랜치명
$ python manage.py startapp products
# settings.py
INSTALLED_APPS = [
products,
]
AppConfig
도 추가할 수 있다.models.py
-> from django.db import models
djnago.db
라이브러리에서 models
모듈을 import 한다.
DB를 위해 필드 속성명을 변수로 선언하고, field type
과 option
을 작성한다.
각 모델 클래스 내부에 meta class
를 작성해 필요한 정보를 넣는다.
CharField(max_length=)
: 고정된 길이의 문자열 정의 (최대 길이 지정 필요)
IntegerField
: 정수값을 저장하고 검증
DateField
, DateTimeField
: 날짜, 날짜시간 정보
EmailField
: 이메일 주소를 저장하고 검증
FileField
, ImageField
: 파일과 이미지 업로드용
AutoField
: 자동으로 증가하는 IntegerField. primary key로 자동 추가된다.
ForeignKey
: 일대다 관계를 지정
ManyToManyField
: 다대다 관계를 지정
help_text
: HTML form에 대해 텍스트 라벨 제공
verbose_name
: 필드 라벨 안에 이름 지어주기 (없으면 필드 이름)
null
: 기본값 False, True이면 null 값으로 저장가능
blank
: 기본값 False, True이면 form 양식안에 비우는 것 (유효성 검사시)
max_length
: 데이터의 최대 길이 지정
on_delete
: 데이터 삭제시 일어나는 일 정의
null
과blank
의 기본값은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."
db_table
: DB 테이블에서 이름 지정
ordering
: 레코드 순서를 제어
$ python manage.py makemigrations <app이름>
$ python manage.py migrate <app 이름>
-> 첫 앱을 migrate 할때는 app 이름을 명시하지 않는다.
-> migrations 내용을 SQL문으로 변환해서 MySQL DB에 적용한다.
$ python manage.py showmigrations <app이름>
$ python manage.py sqlmigrate <app이름> <migrations 이름>
# ex) python manage.py sqlmigrate products 0001
mysql> show databases;
mysql> use (DB이름);
mysql> show tables;
mysql> select * from (테이블명);
mysql> desc (테이블명);