객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 말한다. 객체 간의 관계를 바탕으로 SQL을 자동을 생성해서 sql 쿼리문 없이도 데이터베이스의 데이터들을 다룰 수 있다.
python manage.py shell
위 사진과 같이 manage.py가 있는 위치에서 실행된다.
models.py 에 만들었던 model을 import 한다.
from 앱이름.파일이름 import 모델이름
ex) from user.models import User
Query Set이란?
: Query 란 데이터베이스에 정보를 요청해주는 것을 의미하며 파이썬으로 작성한 코드가 sql 로 매핑되어 queryset(리스트 형태임) 이라는 자료 형태로 값이 넘어온다. 이는 순회가능한 데이터로서 이를 이용하여 1개 이상의 데이터를 불러와 사용할 수 있다.
Queryset의 특징
: Lazy함(?) 미리 db 에 접근해서 값을 불러오는 것이 아니라 출력 등과 같이 필요한 순간에 sql로 매핑되고 이를 통해 db에 접근해 값을 가져온다.
>>> Person.objets.create(name="김우빈", age="20", job="배우")
>>> a = Person(name="김우빈", age="20", job="배우")
>>> a.save()
- get method 사용 : name이 "김우빈"인 데이터 조회하기
>>> Person.objets.get(name="김우빈")
❗️ get() 안에 조건을 제시할 수 있음
❗️ get method는 query set이 아닌 단일행(모델 타입) 결과를 반환함
❗️ 단일행 결과를 반환하므로 get() 다음에 다른 method 사용 불가
❗️ 반환되는 값이 1개 이상일 경우 에러 발생
- all method 사용 : 테이블 데이터 모두 출력
>>> Person.objects.all()
❗️ Query set 타입으로 반환됨.
❗️ dictionary 사용 방법과 동일하게 사용 가능
ex)
>>> a = Person.objects.all()
>>> print(a[0]['name']
- filter method 사용 : 조건에 맞는 데이터 출력
>>> Person.objects.filter(job="배우")
# job이 "배우인" Person table의 데이터를 출력
❗️ objects.all().filter()와 동일한 기능 (all 생략)
❗️ Query set타입으로 반환
+) 조회 조건들
>>> a = Menu.objects.get(name="음료")
# 메뉴 테이블에서 name이 "음료"인 데이터 조회
>>> Category.objects.create(name="쉐이크", menu=a)
>>> a = Menu.objects.get(name="음료")
>>> a.name = "drink"
# name을 "음료"에서 "drink"로 변경
>>> a.save()
>>> a = Menu.objects.filter(name="김우빈", age="20").update(**update_dict)
ex)
>>> car = {
"brand" : "Ford",
"model" : "Mustang",
"year" : "1964"
}
>>> car.update({"color" : "White"})
>>> a = Menu.objects.get(name="김우빈")
>>> a.delete()
>>> a = Menu.objects.filter(name="김우빈",age="20").delete()