[Django] 모델 조회하기

cdwde·2021년 3월 30일
1

Django

목록 보기
3/13

🌝 본 포스트는 리액트와 함께 장고 시작하기 Complete + 별도로 공부한 내용으로 이루어져있습니다

🎈 Model Manager

데이터베이스 질의 인터페이스를 제공

ModelCls.objects.all()	#SELECT * FROM model;
ModelCls.objects.all().order_by('-id')	#SELECT * FROM model ORDER BY id DESC;
ModelCls.objects.create(title='New')	#INSERT INTO model (title) VALUES ('New');

예시

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"

import django
django.setup()

from instagram.models import Post

qs = Post.objects.all()
print(type(qs))	#<class 'django.db.models.query.QuerySet'>
print(qs.query)	#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"
print(qs)	#<QuerySet [<Post: 첫번째>, <Post: 두번째>, <Post: 세번째>]>

qs = Post.objects.all().order_by('-id')
print(qs)	#<QuerySet [<Post: 세번째>, <Post: 두번째>, <Post: 첫번째>]>

🎈QuerySet

  • 순회 가능한 객체
for post in qs:
  print(post.id, post.message)
  • Chaining 지원
Post.objects.all().filter(...).exclude(...)...
  • Lazy 함
    (QuerySet을 만드는 동안 DB에 접근하지 않고 실제 데이터가 필요한 시점에 동작)

🎈 모델 조회

  • queryset.filter()

  • queryset.exclude()

  • queryset[인덱스]: 해당 객체 없을 경우 예외 발생 (IndexError)

  • queryset.get():
    해당 객체 없을 경우 예외 발생 (DoesNotExist)
    두 개 이상 있을 경우 MultipleObjectsReturned

  • queryset.first()

  • queryset.last()

  • OR 조건을 사용하려면 django.db.models.Q 활용

  • 정렬할 때는 모델 클래스의 Meta 속성으로 ordering 설정하기


🎈 shell_plus 사용해보기

shell_plus 공식문서 바로가기

1. django-extensions 설치하기

pip install django-extensions

2. INSTALLED_APPS에 추가

#settings.py

INSTALLED_APPS = [
  ...
  "django_extensions"
  ...
]

❗ ISTALLED_APPS에서 django apps -> third apps -> locals apps 순으로 쓰면 좋음

3. shell_plus 실행

py manage.py shell_plus --print_sql --ipython

4. sql 확인

현재 Meta 속성으로 ordering = ['-id']

❗ queryset에서 직접 order_by 주면 기존 Meta 속성 무시


🎈 django-debug-toolbar 사용해보기

django-debug-toolbar 공식문서 바로가기

1. 설치하기

python -m pip install django-debug-toolbar

2.INSTALLED_APPS에 추가하기

INSTALLED_APPS = [
  #...
  'django.contrib.staticfiles',
  #...
  'debug_toolbar',
  ...
]

3. URLconf에 추가하기

#urls.py

if settings.DEBUG:
  import debug_toolbar
    urlpatterns += [
        path('__debug__/', include(debug_toolbar.urls)),
    ]

4. MIDDLEWARE, INTERNAL_IPS 추가

#settings.py

MIDDLEWARE = [
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
]

INTERNAL_IPS = [
    # ...
    '127.0.0.1',
    # ...
]

0개의 댓글