[Django] 초기세팅부터 Table CREATE까지 🗂

Inah-_-·2021년 3월 4일
0

Django

목록 보기
7/8
post-thumbnail

스타벅스ERD모델링_AQuery에 이어서

내가 까먹지 않기 위해 블로깅

  1. Settings
  2. models.p에 class작성
  3. 터미널에서 migrate


Settings ⚙

1. conda 가상환경 activate

	#conda 가상환경 목록
    $ conda env list
    
	# conda 가상환경 생성 python 버전 지정
    $ conda create -n '가상환경 이름' python=3.8
    
	# conda 가상환경 활성화
	$ conda activate westarbucks

2. python package install

    $ pip install django

    # 이후에 MySQL server에 접속하기 위한 package
    $ pip install mysqlclient
    # mysql 부터 설치

Django project & application 생성

    $ django-admin startproject westarbucks
    $ cd westarbucks

    $ python manage.py startapp products

Database 생성

	# mysql sever 실행 명령어
    $ mysql.server start
	
    # mysql 실행 명령어
    $ mysql -u root -p
	
    # mysql database 생성
    mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;

Project폴더 settings


settings.py

IP 허용

ALLOWED_HOSTS = ['*']

사용하지 않는 요소 주석처리 또는 삭제

settings.py
admin, csrf, auth, middleware

urls.py

# after
from django.urls import path

urlpatterns = [
]

MySQL database 연동

settings.py

DATABASES = {
	'default' : {
	'ENGINE': 'django.db.backends.mysql',
	'NAME': 'DATABASE 명',
	'USER': 'root',
	'PASSWORD': 'DB접속용 비밀번호',
	'HOST': '127.0.0.1',
	'PORT': '3306',
 	}
}

models.py 작성

from django.db import models


class Menu(models.Model):
    name = models.CharField(max_length=45)

    class Meta:
        db_table = "menu"


class Category(models.Model):
    menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
    name = models.CharField(max_length=45)

    class Meta:
        db_table = "category"


class Drink(models.Model):
    name        = models.CharField(max_length=100, null=True)
    description = models.TextField(null=True)
    category    = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)

    class Meta:
        db_table = "drink_and_product"


class Nutrition(models.Model):
    drink            = models.OneToOneField('Drink', on_delete=models.CASCADE, null=True)
    one_serving_kcal = models.DecimalField(max_digits=6, decimal_places=2, null=True)
    sodium_mg        = models.DecimalField(max_digits=6, decimal_places=2, null=True)
    saturated_fat_g  = models.DecimalField(max_digits=6, decimal_places=2, null=True)
    sugars_g         = models.DecimalField(max_digits=6, decimal_places=2, null=True)
    protein_g        = models.DecimalField(max_digits=6, decimal_places=2, null=True)
    caffeine_mg      = models.DecimalField(max_digits=6, decimal_places=2, null=True)

    class Meta:
        db_table = "nutritions"


class Allergy(models.Model):
    name = models.CharField(max_length=45, null=True)

    class Meta:
        db_table = "allergy"


class AllergyDrink(models.Model):
    allergy = models.ForeignKey('Allergy', on_delete=models.CASCADE, null=True)
    drink   = models.ForeignKey('Drink', on_delete=models.CASCADE, null=True, related_name='+')

    class Meta:
        db_table = "allergy_drink"


class Image(models.Model):
    image_url = models.URLField()
    drink     = models.ForeignKey('Drink', on_delete=models.CASCADE, null=True)

    class Meta:
        db_table = "images"

Django shell로 data넣기

# from 'app 파일명'.models import '불러올 class'
>>> from products.models import *

# QuerySet Method로 data 입력 예시
>>> Menu.objects.create(name="음료")
>>> a1 = Menu(name="음료")

# ForeignKey 설정
>>> Category.objects.create(name="콜드브루" menu=a1)
>>> Category.objects.create(name="푸드" menu=a1)

MySQL Database에서 Table 확인

show

mysql> show tables;

desc

mysql> desc menu;
mysql> desc category;
mysql> desc drink_and_product;
mysql> desc allergy;

select

mysql> select * from menu;
mysql> select * from category;

최종 완성 table



profile
Backend Developer

0개의 댓글