-
[DJANGO] CRUDDEV/🟢 DJANGO 2021. 8. 20. 00:44
ORM
장고와 데이터 베이스 언어가 다른데 이를 연결하는 하는 것은 ORM
여기서 CRUD 를 쓸 것이다 . 정확한 ORM뜻은 여기서
우선 구조부터 생각하고 들어가자.
westarbucks 라는 장고 프레임 워크에 여기에는 표시를 안했지만 products 라는 앱을 설치를 하고
이 앱 안에 models.py 그안에 데이터 틀을 만든 상황이다. 이러한 데이터 틀안에는
메뉴, 카테고리, 상품 데이터 틀을 생성했다.
‣ 메뉴의 속성에는 name, 데이터형태는 글자수 20자이내로 설정
‣ 카테고리의 속성에는 name, 데이터형태는 글자수 20자이내로 설정,
menu, ForeignKey로 menu로 설정했다 => 실제표시는 menu_id‣ 상품의 속성에는 name, 데이터형태는 글자수 20자이내로 설정
from django.db import models 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): name = models.CharField(max_length=20) category = models.ForeignKey('Category', on_delete=models.CASCADE)
메뉴 테이블 id name 카테고리 테이블 id name menu_id 상품 테이블 id name category_id (menu_id, category_id 는 내가 지정하는 것이 아니라 FK 지정시 자동을 생성된다.)
이제 이렇게 설정된 models.py 를 데이터 베이스와 연결시켜야한다. 이때 2단계를 거쳐 데이터베이스와 연결하게 된다.
1. 데이터베이스에 넣을 설계도 작성
python manage.py makemigrations2. 데이터베이스에 연결 확정
python manage.py migrate드디어 장고어플리케이션 "westarbucks" 와 데이터베이스 "westarbucks" 가 연결되었다.
이제 파이썬 셀을 통해 데이터를 생성,조회,수정,삭제 의 과정을 연습해보자
python manage.py shell
영어로 줄여서 CRUD 라고 표현한다. Create, Read, Upadte, Delete
이때 가장 중요한 것은 "데이터의 반환값이 무엇인지" 가 핵심이다.
products 앱에 있는 모델 속 데이터 틀인 Product를 가져와 데이터를 넣어보자,
1. Menu 테이블 지정
from products.models import Menu
2. 테이블에 값 직접넣기
Menu.objects.create(name='음료')
3. 조회하기
: get 과 filter
🔥 get 반환값 : 퀘리셋이 아닌 퀘리셋 안에 있는 id가 1 인 객체를 가져온다.
무조건 한개만 가져올 수 밖에 없다. 즉, 값이 하나인것만 가져올 수 있음
🔥 filter 반환값 : 쿼리셋 조건값에 맞는 행을 가져오기 때문에 여러개 값을 가져올 수 있다.
4. 확인하기
테이블 확인하기 메뉴이름을 'menus' 로 지정했음
select * from menus
5. 상품테이블에 값 넣기
#Product 테이블 선택 from products.models import Product #Product 테이블 값 생성 create Product.obejects.create(name='우유', category='음료')
카테고리에서 에러가 뜬다. 에러내용을 보면
상품테이블에서 category에 해당하는 값은 FK로 카테고리값과 연결시키고 있기 때문에 그대로 글자가 들어가면 안되고 객체가 들어가야한다. 객체가 들어가야하니 get 메소드를 사용하자.
In [46]: Category.objects.get(id=1) Out[46]: <Category: Category object (1)>
이러한 객체값을 저장하자. FK로 category를 걸었다고 생각하자.
category = Category.obejects.get(id=1)
이제 상품 테이블에 값을 넣어보면,
여기서 category_id 는 단순히 Integer 값이 아니라 FK 임이 중요하다
westarbuck project - product app '코딩 > 🟢 DJANGO' 카테고리의 다른 글
[DJANGO] 인증과 인가(1) : 회원가입 구현하기 (0) 2021.08.26 [DJANGO] CRUD: POST & GET 로직 (0) 2021.08.22 [DJANGO] 초기세팅 & Git Github (0) 2021.08.20 [DATABASE] 스타벅스 모델링 (0) 2021.08.15 [DATABASE] Intro (0) 2021.08.15