MyPrograming
Pycharm views.py 복습 본문
반응형
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]: 이중 튜플로 결과값이 반환되기 때문에 이런 방식으로 인덱싱을 해야함
반응형
'Python > Python Study' 카테고리의 다른 글
Docstring & 어노테이션 (0) | 2020.07.27 |
---|---|
Static File & Media File (0) | 2020.04.08 |
User 모델 확장 (0) | 2020.04.05 |
해시와 솔트 (0) | 2020.02.26 |
URLconf 2계층 분류 (0) | 2020.01.30 |