Python/Python Study

Pycharm views.py 복습

SeongWon 2020. 2. 17. 19:12
반응형

views.py - DkeaListView

def DkeaListView(request, list):
    try:
        cursor = connection.cursor()

        strSql = "SELECT dkea.dkea_category.c_code,dkea.dkea_category.c_name,dkea.dkea_product.img_src,dkea.dkea_product.p_name, dkea.dkea_product.p_id"
        strSql += " FROM dkea.dkea_product"
        strSql += " LEFT OUTER JOIN dkea.dkea_category on dkea_category.c_id=dkea_product.c_id WHERE dkea.dkea_category.c_code = (%s)"

        result = cursor.execute(strSql, (list,))
        datas = cursor.fetchall()

        str_cname = "SELECT distinct dkea.dkea_category.c_name"
        str_cname += " FROM dkea.dkea_category"
        str_cname += " WHERE dkea.dkea_category.c_code = (%s)"

        result2 = cursor.execute(str_cname, (list,))
        datas2 = cursor.fetchall()

        connection.commit()
        connection.close()

        cate_cname = datas2[0][0]

        cate = []
        for data in datas:
            row = {'c_code': data[0],
                   'c_name': data[1],
                   'img_src': data[2],
                   'p_name': data[3],
                   'p_id': data[4]}

            cate.append(row)

    except:
        connection.rollback()
        print("Failed selecting in DkeaListView")

    return render(request, 'category.html', {'cate': cate, 'cate_cname': cate_cname})

 

  • connection: 데이터베이스에 접속을 하기 위한 모듈 -> settings.py에 입력한 데이터베이스 정보를 가지고 접속
  • cursor(): cursor 객체 생성 -> cursor 란 SQL문을 수행하고 결과를 얻는데 사용하는 객체
  • cursor.execute(): 쿼리문을 연결된 DB로 보내 쿼리를 실행
  • cursor.fetchall(): 쿼리 실행 결과로 반환된 전체 데이터를 데이터베이스 서버로부터 가져옴
  • connection.commit(): 데이터에 대한 변경사항이 있다면 이를 확정, 갱신
  • connection.close(): 데이터베이스와의 연결을 닫음
  • connection.rollback(): 쿼리문 실행 도중 잘못된 경우 실행 전으로 되돌려 놓음
  • render(request, template, context): 템플릿에 context를 채워넣어 표현한 결과를 httpResponse 객체와 함께 돌려주는 함수
cate = []
        for data in datas:
            row = {'c_code': data[0],
                   'c_name': data[1],
                   'img_src': data[2],
                   'p_name': data[3],
                   'p_id': data[4]}

            cate.append(row)

'cate'라는  이름의 빈 리스르를 생성

데이터는 이중튜플로 반한됨 ex) (('의류','c01'),('신발','c02'),)

cate.append() : cate 리스트의 원소 마지막에 추가

 

views.py - DkeaDetailView

def DkeaDetailView(request, detail):
    try:
        cursor = connection.cursor()

        strSql = "SELECT dkea.dkea_category.c_id,dkea.dkea_category.i_name ,dkea.dkea_category.c_name ,dkea.dkea_product.link ,dkea.dkea_product.p_id ,dkea.dkea_product.p_name ,dkea.dkea_product.price"
        strSql += " FROM dkea.dkea_product"
        strSql += " LEFT OUTER JOIN dkea.dkea_category on dkea_category.c_id=dkea_product.c_id WHERE dkea.dkea_product.p_id = (%s)"

        result = cursor.execute(strSql, (detail,))
        datas = cursor.fetchall()

        connection.commit()
        connection.close()

        pro = {'c_id': datas[0][0],
                'i_name': datas[0][1],
                'c_name': datas[0][2],
                'link': datas[0][3],
                'p_id': datas[0][4],
                'p_name': datas[0][5],
                'p_price': datas[0][6]}

    except:
        connection.rollback()
        print("Failed selecting in DkeaDetailView")

    return render(request, 'product.html', {'pro':pro})

 

  • (%s): string 타입의 문자열 포매팅  문자열  안의 특정한 값을 바꿔야할 경우가 있을 때 이것을 가능하게 해줌
  • cursor.execute(strSql, (code,)): 쿼리문을 실행하는데 포매팅된 부분을 code로 치환 → 튜플 안에 값이 하나만 있는 경우, 꼭 뒤에 콤마를 붙여야함. 그렇지 않으면 일반 괄호로 인식하게 됨
  • datas[0][0]: 이중 튜플로 결과값이 반환되기 때문에 이런 방식으로 인덱싱을 해야함

 

반응형