📝 starbucks ERD를 바탕으로 Django의 model을 구현하고 연동된
mySQL database에 데이터를 입력하는 실습을 진행하였다.
1. Django 및 git 초기 세팅
2. github Repository 생성 및 로컬 프로젝트와 연동
$ git remote add origin repository 주소
$ git push origin main
#여기서 main은 branch 이름
3. branch 생성 및 실습 시작
$ git branch 브랜치 이름
$ git checkout 브랜치 이름
4. django application 생성
$ python manage.py startapp products
# settings.py
INSTALLED_APPS = [
...
'products',
]
5. models.py 에 class 작성하여 database table 생성하기
✅ 참고 ERD
✅ 내가 작성한 models.py
from django.db import models
# Create your models here.
class Menu(models.Model):
name = models.CharField(max_length=45)
class Meta:
db_table = 'menu'
class Category(models.Model):
name = models.CharField(max_length=45)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Meta:
db_table = 'categories'
class Product(models.Model):
K_name = models.CharField(max_length=45)
E_name = models.CharField(max_length=45)
description = models.TextField()
nutrition = models.ForeignKey('Nutrition', on_delete=models.CASCADE)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
class Meta:
db_table = 'products'
class Nutrition(models.Model):
one_serving_kcal = models.DecimalField(max_digits=6, decimal_places=2)
sodium_mg = models.DecimalField(max_digits=6, decimal_places=2)
saturated_fat_g = models.DecimalField(max_digits=6, decimal_places=2)
sugars_g = models.DecimalField(max_digits=6, decimal_places=2)
protein_g = models.DecimalField(max_digits=6, decimal_places=2)
caffeine_mg = models.DecimalField(max_digits=6, decimal_places=2)
size_ml = models.CharField(max_length=45)
size_fluid_ounce = models.CharField(max_length=45)
class Meta:
db_table = 'nutritions'
class Image(models.Model):
image_url = models.CharField(max_length=2000)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Meta:
db_table = 'images'
class Allegy(models.Model):
name = models.CharField(max_length=45)
class Meta:
db_table = 'allegy'
class Allegy_product(models.Model):
allegy = models.ForeignKey('Allegy', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Meta:
db_table = 'allegy_products'
$ python manage.py makemigrations (app이름)
$ python manage.py migrate
6. mySQL 접속 및 생성된 Table 확인
$ mysql -u root -p
password 입력👉 mySQL 접속완료
$ use "데이터베이스 명"
👉초기 세팅시 생성한 데이터베이스를 사용한다.
$ show tables;
👉 사용하고 있는 데이터베이스 내에서 생성된 테이블들의 목록을 확인할 수 있다.
$ desc table명
👉 생성된 테이블들의 정보를 확인할 수 있다. (field, type, key 등)
$ SELECT * FROM table명;
👉 테이블을 선택한 후 테이블에 입력된 데이터를 확인 할 수 있다.
데이터가 입력되지 않았을때는 "empty set" 이 반환된다.
7. 데이터 삽입
$ python manage.py shell
# python manage.py shell
>>> Menu.objects.create(name="음료")
>>> Allegy.objects.create(name="우유")
>>> Allegy_product.objects.create(allegy_id=1, product_id=1)
>>> Category.objects.create(name="콜드 브루 커피", menu_id=1)
>>> Categories.objects.create(name = "콜드 브루 커피", menu=Menu.objects.get(name = "음료")
# a1 = Menu.objects.get(name = "음료")라고 해서 변수a1을 넣어주는게 편하니 그렇게 써도됨
>>> Nutrition.objects.create(one_serving_kcal = 75, sodium_mg = 20, saturated_fat_g = 2, sugars_g = 10, protein_g = 1, caffeine_mg = 245, size_ml = 355, size_fluid_ounce = 12)
✅ mySQL Table Auto-increment 값 재정렬
$ SET @CNT=0;
$ UPDATE products SET products.id=@CNT:=@CNT+1;
✅ AUTO-INCREMENT 초기화
$ ALTER TABLE products AUTO_INCREMENT=4;
8. Github push 및 PR(Pull Request) 요청하기
$ git add .
$ git commit -m "커밋 메시지"
$ git push origin "브랜치 명"