Django CRUD (1)

최창환·2022년 3월 15일
0
post-thumbnail

드디어 django의 핵심인 CRUD를 배우게 되었다.
저번에 정리한 django 초기 setting을 토대로 새로운 branch를 생성하고 주어진 ERD를 참고하여 models.py의 클래스를 작성하여 DATABASE Table을 만들어보자.

Branch 생성

git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동 

저번에 작성한 초기 setting을 토대로 해서 새로운 branch공간을 만들고 이동한다.


Django app 생성

# products app 생성

python manage.py startapp products
				or
# products app 생성

django-admin startapp products
# settings.py

INSTALLED_APPS = [
        ...
        'products',
]

Model 생성



주어진 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'



ORM (Object-Relation Mapping)


ORM(Object-Relation Mapping)이란, 객체(Object)와 관계형 데이터베이스(Relational)을 연결(Mapping)해 주는 것을 의미한다.
즉 데이터베이스의 테이블을 객체와 연결하여 table에 CRUD를 할 때, SQL 쿼리를 사용하지 않고도, 가능하게 한다.

따라서 위의 models.py의 클래스는 ORM기능을 통해 MySQL Database의 table과 mapping된다.


Models.py를 DB에 적용하기


makemigrations

python manage.py makemigrations app이름

models.py에 작성한 python code를 database에 적용하기 위한 migration 파일(설계도)를 만드는 과정

migrate

python manage.py migrate

makemigration으로 생성한 migration 파일(설계도)을 database에 적용

migrate가 제대로 적용되었는지 확인

show databases; # DB 목록 불러오기
USE 'database 이름'; # 서버와 연결된 DB 사용
show tables; # DB 내 table 목록 불러오기
DESC 'table 이름'; # table 구조 불러오기
profile
포기하지 않는 개발자

0개의 댓글