본문 바로가기
파이썬 웹 개발

[Python Django] ORM 컬럼의 타입 변경해서 비교하기_ orm column cast

by 배추잠자리 2022. 3. 28.
반응형

MySQL 기준으로,

SELECT * FROM TB_TEST WHERE CAST(column명 as unsigned) > 10;

 

상기와 같이 타입을 변환하여 비교하는 쿼리가 필요할때가 있는데,

쿼리만 짜다가 ORM을 다루게 되면 이런 문법들이 헷갈리게 된다.

 

장고 ORM도 이러한 변환을 지원한다.

 

■ django orm column cast

_data = TestData.objects.annotate(test1_cast=Cast('test1', BigIntegerField()),
                              test2_cast=Cast('test2', BigIntegerField())
                              ).filter(test1_cast__gte=10, test2_cast__lte=30).values().all()

 

위의 방법처럼 사용할 수 있다.

 

from django.db.models.functions import Cast

from django.db.models import BigIntegerField

 

_data = TestData.objects.annotate('cast될 컬럼 별칭'=Cast('cast할 컬럼명', 바꿀 타입명)

).values().all()

 

 

 

■ django orm column cast  Q와 같이 응용해보기.

 

# TestData 라는 모델

class TestData(models.Model):

salary = models.CharField(max_length=255, null=True, blank=True)  # salary는 string

 

obj = Q()

obj.add(Q(salary_cast__gte=1000, salary_cast__lte=5000), obj.AND)

 

_data = TestData.objects.annotate('salary_cast__lte'=Cast('salary'IntegerField()).filter(obj).values().all()

 

> salary라는 string타입 컬럼명을 salary_cast라는 int형 타입으로 변환하여 비교하는 orm이 된다.

반응형

댓글