TIL52. Django : ORM이 실행하는 실제 SQL문을 확인 방법

ID짱재·2021년 10월 24일
0

Django

목록 보기
36/43
post-thumbnail

📌 이 포스팅에서는 Django에서 ORM을 사용할 때, 이 ORM이 실제 SQL문으로 어떻게 작동하는지 확인하는 방법에 대해 정리하였습니다.


🌈 ORM이 실행하는 실제 SQL문을 확인하는 법


🤔 실제 SQL문의 query 확인하기

✔️ 아래와 같은 Account 모델이 있다고 가정했을 때, 모든 row를 가져오는 방법은 all()을 사용합니다.

from django.db import models
class Accounts(models.Model):
    username = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=30)
    date_of_birth = models.DateField()
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)
    class Meta:
        db_table = "accounts"

✔️ 우선 Django Shell에서 확인해보겠습니다.

✔️ 실제 SQL문에서 어떻게 실행되는지 알고 싶다면, query를 붙여 str로 변환시켜 줍니다.

>>> queryset = Account.object.all()
>>> str(queryset.query)

✔️ 아래와 같이 이 ORM이 SQL에서 어떤 문법으로 사용되는지 바로 확인할 수 있습니다.

✔️ 실제 SQL문에서 SELECT * FROM accounts로도 가능하지만, 친절하게 모든 column을 나열시켜 SQL문을 보여주는 것을 확인할 수 있습니다.

✔️ 이번에는 filter 구문도 어떻게 SQL문이 적용되는지 확인해보겠습니다. 생년월일이 1989년 이상인 row를 불러오겠습니다.

✔️ 년도를 제어해야하고, WHERE문을 사용해서 1989년보다 크거나 같은 row들을 불러오기 위해서는 언더바를 활용할 수 있습니다.

>>> queryset = Accounts.objects.filter(date_of_birth__year__gte='1989')

✔️ 이제 이 queryset에 query를 붙여 str으로 변환시켜줍니다.

>>> str(queryset.query)

profile
Keep Going, Keep Coding!

0개의 댓글