드디어 django의 핵심인 CRUD를 배우게 되었다.
저번에 정리한 django 초기 setting을 토대로 새로운 branch를 생성하고 주어진 ERD를 참고하여 models.py의 클래스를 작성하여 DATABASE Table을 만들어보자.
git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동
저번에 작성한 초기 setting을 토대로 해서 새로운 branch공간을 만들고 이동한다.
# products app 생성
python manage.py startapp products
or
# products app 생성
django-admin startapp products
# settings.py
INSTALLED_APPS = [
...
'products',
]
주어진 ERD 모델을 참조하여 models.py에 클래스를 생성하여 database의 table과 mapping해보았다.
from django.db import models
# Create your models here.
class Menu(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = 'menus'
class Category(models.Model):
name = models.CharField(max_length=20)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Meta:
db_table = 'categories'
class Product(models.Model):
korean_name = models.CharField(max_length=100)
english_name = models.CharField(max_length=100)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
description = models.TextField()
class Meta:
db_table = 'products'
class Nutrition(models.Model):
one_serving_kcal = models.DecimalField(max_digits=10, decimal_places=2)
sodium_mg = models.DecimalField(max_digits=10, decimal_places=2)
saturated_fat_g = models.DecimalField(max_digits=10, decimal_places=2)
sugars_g = models.DecimalField(max_digits=10, decimal_places=2)
protein_g = models.DecimalField(max_digits=10, decimal_places=2)
caffeine_mg = models.DecimalField(max_digits=10, decimal_places=2)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Meta:
db_table = 'nutritions'
class Image(models.Model):
image_url = models.CharField(max_length=200)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Meta:
db_table = 'images'
class Allergy(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = 'allergies'
class Allergy_product(models.Model):
allergy = models.ForeignKey('Allergy', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Meta:
db_table = 'allergy_products'
따라서 위의 models.py의 클래스는 ORM기능을 통해 MySQL Database의 table과 mapping된다.
python manage.py makemigrations app이름
models.py에 작성한 python code를 database에 적용하기 위한 migration 파일(설계도)를 만드는 과정
python manage.py migrate
makemigration으로 생성한 migration 파일(설계도)을 database에 적용
show databases; # DB 목록 불러오기
USE 'database 이름'; # 서버와 연결된 DB 사용
show tables; # DB 내 table 목록 불러오기
DESC 'table 이름'; # table 구조 불러오기