TIL 14 Django CRUD

CastleQ·2021년 5월 23일
1

django

목록 보기
2/5
post-thumbnail

내가 살려고 적는 장고CRUD

DataBase 생성 및 create & read

지금 까지 배운것들을 활용해 스타벅스를 모델링 하여
데이터베이스 테이블을 만들어 볼 것이다.

가상환경 활성화

conda activate westarbucks

가상환경 패키지 확인

pip freeze

django 와 mysql이 있다면 우선은 진행한다.

code editor 켜기

code .

서버 활성화

manage.py가 있는 곳으로 터미널 내에서 이동 후

python manage.py runserver

지금 당장 서버에서 요청을 받거나 하는건 아니지만
서버가 활성화가 되는지 확인 해봐야 한다!

위의 화면이 나오면 성공

migration apply

migration이란?
이주,이동 이라는 사전적 의미로
DataBase Model을 Python class를 사용해서 작성하는데 manage.py에서 명령어를 이용해서 sql로 변환하여 DB에 입력한다.
내가 정의해놓은 Python Class Model 을 실제로 데이터베이스에 옮기는 과정이다.

장고에서 만들어 주는 기본적인 테이블을 사용하려면 마이그레이트를 해야 한다.

터미널창 나누어 mysql접속

mysql -u root -p

위의 코드를 입력하면 mysql (ON)

show databases (생성된 데이터 베이스 보기)

mysql> show databases;


westarbucks라고 잘 생성되어 있는 것을 확인할 수 있다.

settins.py로 이동

'NAME'이 westarbucks인지 확인 해야한다.
내가 생성한 프로젝트가 데이터베이스에 잘 묶여 있는지 확인 하는 과정이다 !

westarbucks데이터 사용하기

use westarbucks;

이제부터 westarbucks데이터를 사용한다는 의미

westarbucks데이터 안에 table 확인

SHOW TABLES;

Empty set이라는 출력문이 나올 것이다. 아직 우리는 마이그레이트 하지 않았기 때문이다.

이제 mysql이 아닌 westarbucks터미널로 돌아가서

python manage.py migrate

위의 명령어를 입력한다.

이렇게 출력되면 성공이다.

다시 DB창으로 이동하여

SHOW TABLES;

입력하면 마이그레이트 테이블이 생성된 것을 확인할 수 있다.

이게 완료 된다면 DB 셋팅은 완료가 된 것이다.

products파일의 models.py로 이동하기

이곳에 테이블을 작성이 가능하다 !

📌📌📌📌📌중요📌📌📌📌📌
장고 models.py 에 있는 각 class가 내 DataBase안의 table이 된다.
그리고 안에 있는 field는 해당 table의 colummns이 된다. 꼭 기억하자
📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌📌

다시 터미널로 이동한다.

  1. migration 파일을 생성한다.
  2. migrate (실제로 DB입력)

앞으로 마이그레이트를 해야 할 때마다 마이그레이션을 해주어야 한다.
위의 친구들은 셋트다 함께 해주어야 함

터미널 창에

python manage.py makemigrations

명령어를 입력한다.

이렇게 실행창이 나오는데 products/migrations/0001_initial.py
라는 파일이 생성되었다고 알려준다.
자, VScode로 돌아가 확인 해보면

영롱한 0001_initial.py파일이 생성 되었음을 확인할 수 있다.
구조를 한번 살펴보자

지금 까지 내가 작성한 코드가 DB가 알수있게 잘 migration된걸 눈으로 확인 가능하다.

터미널 내에서 migrate

python manage.py migrate

0001_initial.py를 마이그레이트 했기 때문에 이제 DB에서 확인이 가능하다

DB에서 table확인

mysql> SHOW TABLES;

내가 구성한 컬럼 확인

mysql> DESC menus;

다시한번 Table 추가하기

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라는 표현이 자동으로 들어간다.

Create

장고쉘을 이용한 연습 !(ipython 설치)

pip install ipython

아이파이썬 설치 명령어

ipython

아이파이썬 실행

exit()

아이파이썬 끄기

python manage.py shell

장고쉘 활성화

장고쉘에 import해주기

from products.models import Menu

Menu class를 import 한다.

Menu

위의 명령어를 입력해 잘 import되었는지 확인이 가능하다.

직접 create 해보기 !

Menu.objects.create()


객체가 생성되었다.
괄호 안에 명명한 필드에 value를 생성한 것이다.
다른 컬럼이 있다면 ,(콤마로 구분해서) 넣으면 된다.

Menu.objects.create(name='음료', col2='주류')

만들어진 objects확인

SELECT * FROM menus;

해당 테이블에 모든 컬럼과 로우를 가져오는 것이다.

Read

get()

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

이렇게 한개만 가져올 때 변수에 저장한 값들을 사용한다.

all()

Menu.objects.all()

전부 다 쿼리셋 리스트에 담겨서 온다.

이 안의 실제 값들을 알고싶으면 for문을 사용한다.

a = Menu.objects.all()
for menu in a:
	print(menu.name)

ForeignKey

FK로 묶기 위한 카테고리 가져오기

from products.models import Category

카테고리를 import해온 이후

b = Menu.objects.get(name='음료')

Category.objects.create(name='콜드 브루', menu=b)

콜드 브루의 메뉴를 확인 하는 방법

(ForeignKey의 대상이 되는 객체 확인방법)

c = Category.objects.get(name='콜드 브루')
c.menu.name

profile
DONE IS BETTER THAN PERFECT

0개의 댓글