지금 까지 배운것들을 활용해 스타벅스를 모델링 하여
데이터베이스 테이블을 만들어 볼 것이다.
conda activate westarbucks
pip freeze
django 와 mysql이 있다면 우선은 진행한다.
code .
manage.py가 있는 곳으로 터미널 내에서 이동 후
python manage.py runserver
지금 당장 서버에서 요청을 받거나 하는건 아니지만
서버가 활성화가 되는지 확인 해봐야 한다!
위의 화면이 나오면 성공
migration이란?
이주,이동 이라는 사전적 의미로
DataBase Model을 Python class를 사용해서 작성하는데 manage.py에서 명령어를 이용해서 sql로 변환하여 DB에 입력한다.
내가 정의해놓은 Python Class Model 을 실제로 데이터베이스에 옮기는 과정이다.
장고에서 만들어 주는 기본적인 테이블을 사용하려면 마이그레이트를 해야 한다.
mysql -u root -p
위의 코드를 입력하면 mysql (ON)
mysql> show databases;
westarbucks라고 잘 생성되어 있는 것을 확인할 수 있다.
'NAME'이 westarbucks인지 확인 해야한다.
내가 생성한 프로젝트가 데이터베이스에 잘 묶여 있는지 확인 하는 과정이다 !
use westarbucks;
이제부터 westarbucks데이터를 사용한다는 의미
SHOW TABLES;
Empty set이라는 출력문이 나올 것이다. 아직 우리는 마이그레이트 하지 않았기 때문이다.
이제 mysql이 아닌 westarbucks터미널로 돌아가서
python manage.py migrate
위의 명령어를 입력한다.
이렇게 출력되면 성공이다.
다시 DB창으로 이동하여
SHOW TABLES;
입력하면 마이그레이트 테이블이 생성된 것을 확인할 수 있다.
이게 완료 된다면 DB 셋팅은 완료가 된 것이다.
이곳에 테이블을 작성이 가능하다 !
📌📌📌📌📌중요📌📌📌📌📌
장고 models.py 에 있는 각 class가 내 DataBase안의 table이 된다.
그리고 안에 있는 field는 해당 table의 colummns이 된다. 꼭 기억하자
📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌
- migration 파일을 생성한다.
- migrate (실제로 DB입력)
앞으로 마이그레이트를 해야 할 때마다 마이그레이션을 해주어야 한다.
위의 친구들은 셋트다 함께 해주어야 함
터미널 창에
python manage.py makemigrations
명령어를 입력한다.
이렇게 실행창이 나오는데 products/migrations/0001_initial.py
라는 파일이 생성되었다고 알려준다.
자, VScode로 돌아가 확인 해보면
영롱한 0001_initial.py파일이 생성 되었음을 확인할 수 있다.
구조를 한번 살펴보자
지금 까지 내가 작성한 코드가 DB가 알수있게 잘 migration된걸 눈으로 확인 가능하다.
python manage.py migrate
0001_initial.py를 마이그레이트 했기 때문에 이제 DB에서 확인이 가능하다
mysql> SHOW TABLES;
mysql> DESC menus;
class Category(models.Model):
name = models.CharField(max_length=50)
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
# 상위 카테고리의 FK를 참조하고 데이터가 지워지면 같이 사라진다
class Meta:
db_table = 'products_category'
python manage.py makemigrations
python manage.py migrate
mysql> SHOW TABLES;
mysql> DESC products_category;
FK필드를 사용하면 자동으로 MUL이라고 표현해주고 다쪽이라고 표현해준다.
FK는 언더바(_)id라는 표현이 자동으로 들어간다.
pip install ipython
아이파이썬 설치 명령어
ipython
아이파이썬 실행
exit()
아이파이썬 끄기
python manage.py shell
장고쉘 활성화
from products.models import Menu
Menu class를 import 한다.
Menu
위의 명령어를 입력해 잘 import되었는지 확인이 가능하다.
Menu.objects.create()
객체가 생성되었다.
괄호 안에 명명한 필드에 value를 생성한 것이다.
다른 컬럼이 있다면 ,(콤마로 구분해서) 넣으면 된다.
Menu.objects.create(name='음료', col2='주류')
SELECT * FROM menus;
해당 테이블에 모든 컬럼과 로우를 가져오는 것이다.
Menu.objects.get(name='음료')
Menu.objects.get(name='푸드')
value가 없는것을 찾으면 에러가 나는 특징이 있다.
Menu.objects.get(id=2)
id로도 가능하고 그 로우가 객체이다.
이렇게 쓰면 그 실제값을 알수가 없어서 변수에 저장한다.
m1 = Menu.objects.get(id=2)
m1.name
m1.id
이렇게 한개만 가져올 때 변수에 저장한 값들을 사용한다.
Menu.objects.all()
전부 다 쿼리셋 리스트에 담겨서 온다.
이 안의 실제 값들을 알고싶으면 for문을 사용한다.
a = Menu.objects.all()
for menu in a:
print(menu.name)
from products.models import Category
카테고리를 import해온 이후
b = Menu.objects.get(name='음료')
Category.objects.create(name='콜드 브루', menu=b)
c = Category.objects.get(name='콜드 브루')
c.menu.name