Django ORM에서 select replace 쿼리를 사용하는 방법

2019. 11. 6. 18:23Web

728x90

mysql / mariadb 등 query에서 replace를 이용하여 특정 컬럼의 as로 치환된 값을 뱉어내게 할 수 있습니다.

 

다음을 보시죠

SELECT *, REPLACE(NAME, ' ', '') AS 'rename' FROM TABLES;

 

위 와같은 쿼리 구문을 작성시 TABLES라는

테이블의 전체 컬럼 + (name 컬럼을 치환한 rename 컬럼이 추가 표기됩니다.)

 

이러한 replace 쿼리 작성을 Django ORM에서도 작성이 가능한데 annotate를 활용하는 방법입니다.

 

 

from django.views.generic import View
from django.http import JsonResponse

from django.db.models import F, Func, Value
from overmap.models import Tables

class Test(View):

	@staticmethod
    def get(request, *args, **kwargs):
    	tb = Tables.objects.annotate(
        	rename=Func(
            	F('name'), Value(' '), Value(''),
                function='replace',
        )
        print(tb)
        return JsonResponse({'result': list(tb)})

위 와 같이 annotate에서

Func를 활용하여 replace를 구현할 수 있습니다.

Func는 쿼리에서 () 를 묶어주는 역할이고,

 

F는 컬럼을 명시하고, Value로 해당 되는 값을 표기합니다.

마지막으로 function인자로 replace를 부여하면 

REPLACE(name, ' ', '') 처럼 사용할 수 있습니다.

728x90