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이 된다.
'파이썬 웹 개발' 카테고리의 다른 글
[Python Django] orm sum, count 출력하기 _orm 합계, 카운트(집계함수) (0) | 2022.04.14 |
---|---|
[Django] datatable Server-side processing _ 10,000row 넘어갈 때 방법 (0) | 2022.04.12 |
[pywebview] 웹 페이지 이동시키기 (0) | 2022.03.15 |
[Django] psycopg2 패키지 에러_ Symbol not found: _PQbackendPID (0) | 2022.03.15 |
[Django] 화면(html 프론트)에서 파이썬 리스트 정렬하기 (0) | 2022.03.07 |
댓글