장고 쿼리셋 API

최형택·2022년 2월 13일
0

1.쿼리셋(QuerySet) 이란

쿼리셋을 알기전에 ORM 이란 것부터 알고 넘어가ㅈ..

orm이란 원래 데이터베이스(DB)는 sql문, sql언어로써 읽고 쓰고 변경하고 삭제할 수 있는데, 그러지 않고 파이썬은 파이썬 코드로, 루비는 루비 코드로 각 언어의 코드를 사용해서 sql문을 만들어내는 것입니다.

즉, 쿼리(query)란 데이터베이스에 정보를 요청해주는 것입니다.
이 때 파이썬으로 작성한 코드가 SQL문이 mapping되어 쿼리셋(queryset) 이라는 자료 형태로 값이 넘어오게 됩니다.

1-1) 쿼리셋 api의 종류

자주사용되고있는 쿼리셋 api 리스트

  • Model method 종류
    all() , filter() , exclude() , values() , values_list()
    get() , create() , count() , exists() , update() , delete() , first() , last()

2.쿼리셋 API 반환하는 경우

all()
filter() & exclude()
values()
values_list()

2-1) all()

한 테이블의 모든 레코드를 가져오려면 아래와 같이 all() method를 사용합니다. 그 결과로 QuerySet 을 반환합니다. QuerySet 안에는 각각 인스턴스가 포함되어 있습니다.

In : Category.objects.all()
Out : <QuerySet [<Category: Category object (2)>, <Category: Category object (3)>, <Category: Category object (4)>, <Category: Category object (5)>, <Category: Category object (6)>]

2-2)filter() & exclude()

filter() method는 가장 자주 사용하는 필터 기능입니다. filter(**kwargs): 키워드 인자로 주어진 lookup 조건에 일치하는 레코드들의 QuerySet을 반환합니다.

In : Category.objects.filter(name='벨로그')
Out : [<Category: Category object (3)>, <Category: Category object (4)>]

In : Category.objects.filter(name='벨로그').exclude(id=3)
Out : [<Category: Category object (4)>]

2-3) values()

모델 인스턴스가 아닌 dictionary을 포함하는 QuerySet을 반환합니다.

In : Category.objects.filter(name='브루드커피').values()
Out : <QuerySet [{'id': 3, 'name': '벨로그'}, {'id': 4, 'name': '벨로그'}]>

3. 쿼리셋 API 반환되지 않는 경우

3-1) create()

Table에 데이터를 추가(INSERT) 해주는 method로, 생성된 인스턴스를 반환해줍니다.

In : Category.objects.create(name='벨로그')
Out : <Category: Category object (1)>

3-2) get()

지정된 조회 매개 변수와 일치하는 하나의 인스턴스만를 반환합니다.

In : Category.objects.get(name="벨로그")
Out : <Category: Category object (1)>

3-3) update()

지정된 필드에 대해 업데이트 쿼리를 수행하고 일치하는 행 수를 반환합니다.

In : Category.objects.filter(name='벨로그').update(name='블로그')
Out : 2 #총 업데이트된 row 개수

3-4) delete()

QuerySet의 모든 행에 대해 SQL 삭제 쿼리를 수행하고 삭제 된 개체 수와
개체 유형별 삭제 횟수가 있는 dictionary를 반환합니다.

In : Category.objects.filter(name='벨로그').delete()
Out : (1, {'products.Category': 1})

3-5) save()

INSERT 또는 UPDATE 를 수행하는 method로, 단일 객체에 대해서 업데이트를 수행할 때 많이 사용됩니다.

In : category = Category.objects.get(id=1)
Out : <Category: Category object (1)>

In : category.name
Out : '벨로그'

In : category.name = 'new blog'
In : category.save()

In : category.name
Out : 'new blog'

3-6 exists()

filter()와 함께 서용해서 filter 조건에 맞는 데이터가 있는지 조회, 존재하면 True 존재하지 않으면 False를 반환합니다.

In : Category.objects.filter(name='벨로그').exists()
Out : True

0개의 댓글