Today I Learned 40 - Django / QuerySet API의 CRUD 구현

angie·2022년 8월 31일
0

Django

목록 보기
1/3
post-thumbnail

CRUD를 구현하는 QuerySet API 사용하기

CREATE

데이터 객체를 만드는 3가지 방법

  1. 첫번째 방법

    • article = Article()

      • 클래스를 통한 인스턴스 생성
    • article.title

      • 클래스 변수명과 같은 이름의 인스턴스 변수를 생성 후 값 할당
    • article.save()

      1. 인스턴스로 save 메서드 호출

        article = Article()
        article.title = 'first'
        article.content = 'django!'
        
        # save를 하지 않으면 아직 DB에 값이 저장되지 않은 상태
        article
        # 출력 : <Article: Article object (None)>
        
        Article.objets.all()
        # 출력 : <QuerySet []>
        
        # save를 하고 나면 저장
        article.save()
        article
        # 출력 : <Article: Article object (1)>
        article.id
        # 출력 : 1
        article.pk
        # 출력 : 1
        Article.objects.all()
        # 출력 : <QuerySet [Article: Article object (1)]
    - (1) 은 Id를 의미

      ![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6cef9509-7a2b-4f97-9355-7571f8387c73/Untitled.png)

      - 인스턴스인 article을 활용하여 변수에 접근(저장된 데이터 확인)
  1. 두번째 방법

    • 인스턴스 생성시 초기 값을 함께 작성하여 생성

      article = Article(title='second', content='django!')
      # save 호출하여 저장
      article.save()
      
      article
      # 출력 : <Article: Article object (2)>
      
      Article.objects.all()
      # 출력 : [<Article: Article object (1)>, <Article: Article object (2)>]
  2. 세번째 방법

    • QuerySet API 중 create()메서드 활용
    Article.objects.create(title='third', content='django!')
    • save를 호출하지 않는 방법 (save까지 포함하고 있는 것)

READ

  • CRUD에서 제일 중요한 것

  • QuerySet API method를 사용해 데이터를 다양하게 조회하기

  • 두가지

    • querysets을 받는냐
    • 안 받느냐

all()

  • QuerySet return

  • 전체 데이터 조회

  • 순회가 가능한 데이터로 반복문 사용이 가능

articles = Article.objects.all()
for article in articles:
    print(article)
    
# 출력
# Article object (1)
# Article object (2)
# Article object (3)

get()

  • 단일 데이터 조회
  • 객체를 찾을 수 없으면 예외
  • 둘 이상의 객체를 찾으면 예외

​ ⇒ 유니크한 값에 대해서만 적용가능 함 = PK

  • 고유성을 보장하는 조회에서만 사용 가능

filter()

  • 지정된 조회 매개 변수와 일치하는 객체를 포함하는 새 QuerySet을 반환

  • 조회를 해서 없거나, 1개 있어도 반환함

    → 없어도, 하나 있어도 QuerySet으로 반환

Article.objects.filter(content='django')
# 출력 : content가 'django!'인 데이터만 QuerySet에 담아 출력

Article.objects.filter(title='ssafy')
# 출력 : title이 'ssafy'인 데이터만 QuerySet에 담아 출력
# 조회한 결과가 없으면 빈 QuerySet을 출력한다.
# 조회한 결과가 1개여도 QuerySet으로 반환한다.
Field lookups
  • 특정레코드에 대한 조건을 설정하는 방법
  • 다양한 built-in lookups 공식문서 참고!
Article.objects.filter(content__contains='dj')

UPDATE

  • 수정하고자하는 인스턴스 객체를 조회 후 반환 값을 저장
  • 인스턴스 객체의 인스턴스 변수 값을 새로운 값으로 할당
  • save() 메서드 호출
article = Article.objects.get(pk=1)

# 인스턴스 변수 변경
article.title = 'byebye'

# 저장
article.save()

# 정상적으로 변경된 것을 확인
article.title
# 출력 : 'byebye'

DELETE

  • 삭제하고자 하는 인스턴스 객체를 조회 후 반환 값을 저장

  • delete() 메서드 호출

    → 삭제된 값은 재사용하지 않는다.

article = Article.objects.get(pk=1)

# delete 메서드 호출
article.delete()
(1, {'articles.Article': 1})

# 1번 데이터는 이제 조회할 수 없음
Article.objects.get(pk=1)
# DoesNotExist: Article matching query does not exist.
profile
better than more

0개의 댓글