user가 제품의 상세정보를 보기 위해 이미지(썸네일)를 클릭하면 그 정보는 web application server로 요청되고, 서버는 필요한 정보를 Database에 다시 요청하여 응답한다.
이 모든 process는 HTTP 통신을 기반으로 이루어진다.
Django는 웹서버와 데이터베이스 사이에 있는 파이썬 코드들의 집합. 파이썬 코드로 이루어짐.
1. 웹서버를 통해 요청이 들어오면, URL conf라는 모듈(파일)로 들어옴
2. 그 요청을 View로 전송: 요청이 들어온 데이터를 입맛에 맞게 가공하는 역할, 가공을 위해 model에 데이터 요청
3. Model은 database와 통신하여 view에 정보 전달
ORM 사용해서 Python code로 database table 생성하기
Migration class
파이썬 코드와 데이터베이스 언어는 다름.
Migration class는 SQL문이라는 데이터베이스가 알아들을 수 있는 언어로 전달.
파이썬으로 짠 클래스가 데이터베이스로 짠 테이블과 맵핑해주는 것: ORM(Object-relational mapping)
모델을 통해 데이터작업
CRUD로 모든 작업 가능
models.py 에서 작성한 class 내용을 ORM을 통해 데이터 테이블로 전달
from project.models import Person
# Person 테이블에 '이현주'라는 사람의 정보(나이, 직업) 입력(create)
Person.objects.create(name='이현주', age=30, job='Backend Developer')
# objects라는 메소드는 Django에서 생성해놓은 것으로 일반 파이썬에서는 사용할 수 없음
메뉴(Menu) 생성하는 방법
create()
메소드 사용 Menu.objects.create(name="음료") # '음료' 메뉴 생성
save()
메소드 사용 a3 = Menu(name = "상품")
a3.save() # '상품' 메뉴 생성
bulk_create()
메소드 사용하여 여러 메뉴 한번에 생성 a1 = Menu(name = "음료")
a2 = Menu(name = "푸드")
Menu.objects.bulk_create([a1, a2]) # '음료, 푸드' 메뉴 생성
mysql에서 생성한 메뉴 확인
mysql> select * from menus;
python class 내의 object 매니저가 모두 호출 가능
메뉴(Menu) 호출하기
get()
메소드와 name
필드 사용 Menu.objects.get(name="음료") # '음료' 메뉴 호출
get()
메소드와 id
필드 사용 Menu.objects.get(id="1") # Menu 테이블에서 id=1인 object를 호출하라
Read를 위한 메소드는 get()
, filter()
, exclude()
, values()
, values_list()
등이 있다.
filter()
를 이용하면 데이터의 QuerySet [list]를 받아올 수 있음.
Update는 조건에 맞는 걸 수정한다는 뜻이기 때문에 get이나 filter를 이용해 필요한 정보를 미리 불러와야 한다.
delete
를 하기 위해서는 delete 할 요소를 확실하게 정해야하며, delete 하면 그 결과는 Tuple로 반환된다. 위치 지정을 따로 하지 않는 이상, 지워진 데이터 다음 순서로 다음 데이터가 지정됨.
Person.objects.filter(age=33).delete()
Out: (2, {'Persons.Person':2}) # 2개 삭제됨
CRUD를 통해 웹상에서 일어나는 모든 작업 가능하다
나에게 필요한 것은 ORM 연습과 Django의 80%를 차지하는 QuerySet API!!
기본기 탄탄히 만들기!!