<UR-Type> DB에서 결과 불러오기

이시우·2021년 4월 5일

프로젝트 : UR-Type

목록 보기
6/11
post-thumbnail

ORM을 쓰느냐 ? SQL문을 쓰느냐 ? 의 고민..

유저가 설문을 통해 결과를 서버로 보내주면 그 결과를 기반으로 DB에서 결과값을 불러온다.
이 부분에서 약간 고민했던게 ORM을 사용할지, SQL문으로 직접 불러올지 고민이였다.
왜냐하면 결과값을 4개의 테이블 중 하나에서 가져와야했기 때문이다.

Spring에서 Mapper방식으로 Mybatis를 사용할 때는 테이블이 여러개여도 내가 테이블 명을 입력해야했기 때문에 고민할 부분이 없었다.
Mybatis는 ORM과 SQL문 그 사이에 있는 느낌이니까..

쨋든 Django로 돌아와서 ! 코드가 좀 길어지긴 해도 ORM을 사용하기로했다.
나는 Oralce, Maria DB를 배우면서 SQL문에는 꽤 익숙하다고 생각했기 때문이다.
그에 비해 ORM은 Django에 넘어와서 처음 해보는거라 연습이 필요하다고 생각했고, ORM으로 구현하기로 했다.

구현

def Result(request):
    print('Result_test')
    if request.method == 'POST' :
        brand_Size = request.POST.get('brand_Size')
        brand_Genre = request.POST.get('brand_Genre')
        design_Point = request.POST.get('design_Point')
        design_Color = request.POST.get('design_Color')
        avg_Price = request.POST.get('avg_Price') 
        
        # 브랜드 사이즈 확인 후 알맞은 값을 가져온다.
        if brand_Size == 'Globals' :
            datas = ReadGlobals(brand_Genre,design_Point, design_Color, avg_Price)
        if brand_Size == 'National' :
            datas = ReadNational(brand_Genre, design_Point, design_Color, avg_Price)
        if brand_Size == 'Middle' :
            datas = ReadMiddle(brand_Genre,design_Point, design_Color, avg_Price)
        if brand_Size == 'Soho' :
            datas = ReadSoho(brand_Genre, design_Point, design_Color, avg_Price)

    return render(request, 'result.html',{'datas':datas})

result함수로 잘 들어오는지 확인 후, requst의 값이 POST일 경우에만 작동한다.
유저가 설문에서 선택한 값을 받아 변수로 저장한다.
그 후 브랜드 사이즈에 맞는 함수를 실행해 테이블에서 값을 가져온다.

각각의 함수에는

def ReadGlobals(genre, point, color, price):
    datas = Globals.objects.filter(
        brand_Genre = genre,
        design_Point = point,
        design_Color = color,
        avg_Price = price
        )
    return datas

이런식으로 ORM을 사용했다.
filter의 역할은 SQL문의 where절과 동일한 역할을 한다.
읽어온 값은 datas로 리턴되어 html파일로 전달된다.

0개의 댓글