[Django] 장고 Models를 활용한 데이터베이스 처리#6_Queryset의 정렬 및 범위 조건

아직·2022년 7월 8일
0
post-thumbnail

1)

(askcompany) C:\Dev\askcompany>python manage.py shell_plus --print-sql --ipython

...

In [8]: Post.objects.all()[1:3]
Out[8]: SELECT "instagram_post"."id",
       "instagram_post"."message",
       "instagram_post"."photo",
       "instagram_post"."is_public",
       "instagram_post"."created_at",
       "instagram_post"."updated_at"
  FROM "instagram_post"
 ORDER BY "instagram_post"."id" DESC
 LIMIT 2
OFFSET 1

Execution time: 0.001002s [Database: default]
<QuerySet [<Post: 두번 >, <Post: 첫번째 메세지>]>

In [9]: Post.objects.all()[1:3:1]
SELECT "instagram_post"."id",
       "instagram_post"."message",
       "instagram_post"."photo",
       "instagram_post"."is_public",
       "instagram_post"."created_at",
       "instagram_post"."updated_at"
  FROM "instagram_post"
 ORDER BY "instagram_post"."id" DESC
 LIMIT 2
OFFSET 1

Execution time: 0.000000s [Database: default]
Out[9]: [<Post: 두번 >, <Post: 첫번째 메세지>]

sql을 요청해서 확인했을 때 LIMIT(stop-start), OFFSET(start) 두 가지만 있는 것을 확인할 수 있다. step 값을 넣지 않으면 Out[8]에서 QuerySet을 반환하고 넣으면 Out[9]에서 리스트 타입을 반환함을 알 수 있는데, 따라서 step 값은 sql이 아닌 장고의 쿼리셋이 처리하면서 새로운 리스트를 만들어-반환하는 것임을 알 수 있다.

0개의 댓글