파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
장고 모델을 통해 데이터베이스 테이블과 파이썬 클래스를 1:1로 매핑한다.
모델과 데이터베이스는 다음 두가지로 관리될 수 있다. 보통 첫번째를 많이 활용하나 이미 데이터베이스가 구축된 상태에서 적용할 경우 두번째 방법이 사용되기도 한다.
python manage.py makemigrations
python manage.py migrate
마이그레이션을 하면 DB 테이블명은 "앱이름_모델명"으로 정해진다.
모델 Meta 클래스의 db_table 속성을 지정하고 싶다면 마이그레이션 전에 지정해야 한다.
python manage.py inspectdb
모델 적용 순서는 다음과 같이 모델을 정의하고 마이그레이션 명령어를 사용한다.
# shop/models.py
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=100)
desc = models.TextField(blank=True)
price = models.PositiveIntegerField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
python manage.py makemigrations 앱이름
python manage.py migrate
종류 | 필드 |
---|---|
기본키 | AutoField, BigAutoField |
문자열 | CharField, TextField, SlugField |
날짜/시간 | DateField, TimeField, DateTimeField, DurationField |
참/거짓 | BooleanField, NullBooleanField |
숫자 | IntegerField, SmallIntegerField, PositiveIntegerField, PositiveSmallIntegerField, BigIntegerField, DecimalField, FloatField |
파일 | Binary, FileFiled, ImageField, FilePathField |
이메일 | EmailField |
URL | URLField |
UUID | UUIDField |
아이피 | GenericIPAddressField |
Relationship Types | ForeignKey, ManyToManyField, OneToOneField |
옵션 | 설명 | DB옵션 여부 |
---|---|---|
blank | 장고 단에서 validation시에 empty 허용 여부 (디폴트 False) | |
null | null 허용 여부 | True |
db_index | 인덱스 필드 여부. 마이그레이션시에만 적용된다. | True |
default | 디폴트 값 지정. 혹은 리턴해줄 함수 지정 | |
unique | 현재 테이블 내에서 유일성 여부 | True |
choices | select박스 소스로 사용 | |
validators | validators를 수행할 함수를 다수 지정 | |
verbose_name | 필드 레이블, 미지정 시 필드명이 사용 | |
help_text | 필드 입력 도움말 |
ORM은 SQL 쿼리를 만들어주는 역할일 뿐이다.
성능 높은 애플리케이션을 위해서는 사용할 데이터베이스에 대한 깊은 이해가 필요하다.
읽기 좋은 글이네요! 시리즈 정주행하겠습니다. 감사해서 댓글 남길려고 velog 가입했어요 ㅎ