마우스 우클릭으로 확인 가능
- 편의를 위한 외부 라이브러리 설치
pip install ipython
pip install django-extensions
가상환경에서 설치하기.
freeze 틈틈히 해두기(pip freeze > requiremets.txt
setting에 추가.
- ORM 관련 구문 연습을 위해 파이썬 쉘 환경을 사용
- shell_plus로 진행
python manage.py shell_plus
python코드를 통해 DB 조작 가능
Database API
- django가 제공하는 ORM을 사용해 데이터베이스를 조작하는 방법
- Model을 정의하면 데이터를 CRUD할 수 있는 API를 제공
Article.objects.all()
modelclass.manager.queryset API
- objects manager
- django 모델이 데이터베이스 쿼리 작업을 가능하게 하는 인터페이스
- django는 기본적으로 모든 django 모델 클래스에 대해 objects라는 manager 객체를 자동으로 추가함
- 이 manager를 통해 특정 데이터 조작 가능
- DB를 python class로 조작할 수 있도록 여러 메서드를 제공하는 manager
Query
- 데이터베이스에 특정한 데이터를 보여달라는 요청
- 파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 우리에게 전달
QuerySet
- 데이터베이스에게서 전달받은 객체 목록(데이터 모음)
- 순회가 가능한 데이터로써 1개 이상의 데이터를 불러와 사용 가능
- Django ORM을 통해 만들어진 자료형이며, 필터를 걸거나 정렬 등을 수행할 수 있음
- objects manager를 사용하여 복수의 데이터를 가져오는 queryset method를 사용할 때 반환되는 객체
- 데이터베이스가 단일한 객체를 반환할 때는 QuerySet이 아닌 class의 인스턴스로 반환됨
QuerySet API를 통한 CRUD
Create
- 첫번째 방법
- article = Article()
- 클래스를 통한 인스턴스 생성
- article.title
- 클래스 변수명과 간은 이름의 인스턴스 변수를 생성 후 값 할당
- article.save()
- 인스턴스로 save 메서드 호출
- 두번째 방법
인스턴스 생성 시 초기 값을 함께 작성하여 생성
article = Article(title='second', content='django')
article.save()
- 세번째 방법
QuerySet API 중 create() 메서드 활용
Article.objects.create(title='third', content='django')
- .save()
- 객체를 데이터베이스에 저장함
- 데이터 생성 시 save를 호출하긱 전에는 객체의 id값은 none
- id값은 django가 아니라 데이터베이스에서 계산되기 때문
- 단순히 모델 클래스를 통해 인스턴스를 생성하는 것은 DB에 영향을 미치지 않기 때문에 반드시 save를 호출해야 테이블에 레코드가 생성됨
Read
- QuerySet API method를 사용해 데이터를 다양하게 조회하기
- QuerySet API method는 크게 두가지로 분류됨
- methods that “return new querysets”
- methods that “do not return querysets”
# all()
# QuerySet return
# 전체 데이터 조회
Article.objects.all()
# get()
# 단일 데이터 조회
# 객체를 찾을 수 없으면 doesnotexist 예외 발생
# 둘 이상의 객체를 찾으면 multipleobjectsreturned 예외 발생
Article.objects.get(pk=1)
# filter()
# 지정된 조회 매개변수와 일치하는 객체를 포함하는
# 새 QuerySet 반환
Article.objects.filter(content='django')
# field lookups
# 특정 레코드에 대한 조건을 설정하는 방법
# QuerySet 메서드 filter(), exclude() 및 get()에 대한 인자
Article.objects.filter(content__contains='dj')
Update
- 수정하고자하는 article 인스턴스 객체를 조회 후 반환 값을 저장
- article 인스턴스 객체의 인스턴스 변수 값을 새로운 값으로 할당
- save() 인스턴스 메서드 호출
article = Article.objects.get(pk=1)
# 인스턴스 변수를 변경
article.title = 'changed'
# 저장
article.save()
# 정상적으로 변경된 것을 확인
article.title
'byebye'
Delete
- 삭제하고자하는 article 인스턴스 객체를 조회 후 반환 값을 저장
- delete() 인스턴스 메서드 호출
'Programming Language > Django' 카테고리의 다른 글
Django 06) CRUD_2 (0) | 2023.04.11 |
---|---|
Django 05) CRUD_1 (0) | 2023.04.11 |
Django 03) Form & Data (0) | 2023.04.11 |
Django 02) MTV 구조 (0) | 2023.04.11 |
Django 01) 첫걸음 (0) | 2023.04.11 |