📌 이 포스팅에서는 Django에서 ORM을 사용할 때, 이 ORM이 실제 SQL문으로 어떻게 작동하는지 확인하는 방법에 대해 정리하였습니다.
✔️ 아래와 같은 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)