장고 ORM OUTER JOIN은 성능도 안좋을 뿐더러,
가독성 및 작성이 상당히 까다롭다...
List 안에 dict key값으로 정렬하기를 포함하여
이것을 통해 JOIN을 대체하는 방법입니다.
■ LIST의 dict key로 정렬하기
예를 들어 리스트 내에 위와같이 데이터가 있다고 해보자.
특정 key값으로 정렬을 하고 싶을때.
이런식으로 가능하다.
해당 LIST의 dict 특정 key값으로 정렬이 가능하다.
newlist = sorted(LIST명, key=lambda d: d['key4'])
# 즉 LIST명에 대해서 Dict key4 라는 키값으로 정렬을 하는것이 된다.
■ OUTER JOIN 대체 방법
# MODEL
위와 같은 모델이 있다고 해보자.
한 row에 각 테이블들의 값을 담으면서, OUTER JOIN 처럼
없는 컬럼에 대해서는 null값으로 채워져야 한다면???
# ORM을 작성 후 LIST에 담아 특정 key로 정렬
# 소스코드
# ORM
comment_list = Feedcomment.objects.filter().values()
feeditem_list = Feeditem.objects.filter().values()
_item_set = [] # 값들을 담아줄 곳
# 없는 컬럼에 대해서는 None으로 처리해주면 된다.
for comment in comment_list: # 필요한 컬럼에 맞게 조립
test = {
'commentbody': comment['commentbody'],
'body': None,
'parentid': comment['parentid'],
'create_date': comment['create_date'],
'user': comment['user'],
'update_date': None,
}
_item_set.append(test)
# 없는 컬럼에 대해서는 None으로 처리해주면 된다.
for feeditem in feeditem_list: # 필요한 컬럼에 맞게 조립
test = {
'commentbody': None,
'body': feeditem['body'],
'parentid': feeditem['parentid'],
'create_date': feeditem['create_date'],
'user': feeditem['user'],
'update_date': feeditem['update_date'],
}
_item_set.append(test)
# _item_set 라는 곳에 필요한 컬럼만 담았다면 이제는 정렬을 해준다.
newlist = sorted(_item_set, key=lambda d: d['create_date'])
# LIST 내 DICT key값 " create_date " 순으로 정렬이 가능해집니다.
# 즉 코멘트, 아이템 두 테이블의 아우터 조인 후 날짜순으로 정렬한게 되는 것입니다.
각각 dict key를 맞춰주고, 없는 컬럼에 대해서는 None 처리를 한다.
즉 LEFT OUTER JOIN을 했을때 대응되지 못하는 컬럼에 대해서 null이 되듯이.
[KeyWord]
장고 orm outer join, python dict key 정렬, 파이썬 dict key 정렬, 장고 orm key 정렬, django orm outer join, dict 정렬, 파이썬 List key 정렬, 파이썬 List key 정렬, 파이썬 dict key sort, django outer join
'파이썬 웹 개발' 카테고리의 다른 글
[Django] 파이썬 장고 서브쿼리(orm subquery) 예제 _ SQL과 비교하기 (0) | 2022.05.12 |
---|---|
[Django] ManyToManyField 추가 및 삭제 방법_ 예제 (0) | 2022.05.10 |
[Python Django] 월별 sum, count 집계함수 orm group_by (0) | 2022.04.19 |
[Python Django] orm sum, count 출력하기 _orm 합계, 카운트(집계함수) (0) | 2022.04.14 |
[Django] datatable Server-side processing _ 10,000row 넘어갈 때 방법 (0) | 2022.04.12 |
댓글