Django에서 내가 사용한 orm이 어떤 쿼리를 보내는지 확인하고 싶은 경우가 있다.
이럴 때 쉽게 django-extensions의 shell_plus를 사용하면 쉽게 확인할 수 있다.
[설치]
먼저 장고 프로젝스를 생성한 뒤 django-extensions 설치
pip install django-extensions
settings.py 의 INSTALLED_APPS 에 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions', #추가
'user', #유저앱추가
]
모델 생성
from django.db import models
class User(models.Model):
username = models.CharField(max_length=20, unique=True)
email = models.EmailField(max_length=100, unique=True)
password = models.CharField(max_length=20)
fullname = models.CharField(max_length=20)
join_date = models.DateTimeField(auto_now_add=True)
class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
hobby = models.ManyToManyField("hobby")
age = models.IntegerField()
class Hobby(models.Model):
name = models.CharField(max_length=50)
shell_plus 실행
python manage.py shell_plus --print-sql
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission
from user.models import Hobby, User, UserProfile
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When
from django.utils import timezone
from django.urls import reverse
from django.db.models import Exists, OuterRef, Subquery
Python 3.9.9 (v3.9.9:ccb0e6a345, Nov 15 2021, 13:06:05)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
사용할 Model, 함수들을 자동으로 임포트 해준다.
ORM으로 모델을 생성
>>> User.objects.create(username='gogo')
INSERT INTO "user_user" ("username", "email", "password", "fullname", "join_date")
VALUES ('gogo', '', '', '', '2023-01-15 08:17:45.216278') RETURNING "user_user"."id"
Execution time: 0.001413s [Database: default]
<User: User object (2)>
SQL INSERT 문으로 생성하는걸 확인할 수 있고 시간, 결과까지 확인이 가능하다.
ORM 으로 모델 조회
>>> User.objects.all()
SELECT "user_user"."id",
"user_user"."username",
"user_user"."email",
"user_user"."password",
"user_user"."fullname",
"user_user"."join_date"
FROM "user_user"
LIMIT 21
Execution time: 0.000491s [Database: default]
<QuerySet [<User: User object (1)>, <User: User object (2)>]>
SQL SELECT 문으로 조회하는걸 확인할 수 있고 시간, 결과까지 확인이 가능하다.
'Django' 카테고리의 다른 글
Django CSRF (0) | 2023.03.18 |
---|---|
Django 유저모델 Email필드로 로그인 (0) | 2023.03.14 |
[Django] values(), values_list() (0) | 2023.01.17 |
Django,RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. (0) | 2023.01.09 |