본문 바로가기
Python/Django

Django -MySQL 데이터에 필터 걸어 딕트로 가져오기

by zenna 2022. 4. 15.
728x90
목표 : 아이디와 날짜를 받아 일치하는 데이터들의 합계를 구하기

자세히 설명하면, 

보시는 것처럼 링크에 id와 날짜 문자열이 입력되면 그 값을 받아서 

MySQL의 DB 중 user_idx컬럼의 값이 id인 zenna와 같고, date컬럼의 값이 날짜(date)인 '2022-04-14'와 같은 데이터를 고릅니다.

zenna는 2022-04-14에 데이터를 두 번 등록했네요. 딕트의 dang은 4+0=4, dan은 8.74+41.8= 50.54 니까 딕트에는

{'dang' : 4, 'dan' : 50.54} 식으로 추가가 되겠네요.

 

파이썬 작업 코드는 views.py에 작성합니다. 

필요한 것들을 먼저 import해주겠습니다. 

MySQL의 DB는 'diet'라는 테이블에 저장되어 있습니다. 따라서 테이블을 불러오고, 

Sum기능을 사용해 필터링 된 정보의 합계값을 구해주려 합니다. 

 

에구.. 코드가 굉장히 길어보이지만, 다 같은내용이라는걸 금방 눈치챌 수 있을거예요. 

for 문을 쓰거나 해서 반복되는 내용은 정리하고 싶었는데, 컬럼명이 달라서 어려움이 있었네요.

더 좋은 방법이 있으신 분은 댓글 남겨주세요!

 

설명하면 첫번째 줄에서는 diet 테이블에서 filter(date=date), filter(user_idx=idx)로 필터링을 합니다. 그리고 'tan' (탄수화물을 의미하고 싶었어요) 컬럼의 데이터를 전부 더해서(Sum) dict로 만들어 주었어요. 

이 내용은 아래 블로그를 많이 참고했습니다. 

http://raccoonyy.github.io/django-annotate-and-aggregate-like-as-excel/

출력해보면 아래처럼 dict타입으로 생성되었죠?

이제 같은 방식으로 다른 컬럼들의 합계값도 딕트에 추가해줄거예요. 'sums' 딕트에 값을 추가 (update)해주면 끝납니다. 

출력을 해볼까요?

이런식으로 각 컬럼의 합계값이 딕트에 추가된 것을 확인할 수 있어요. 

이 sums딕트를 html로 보내기 위해 context라는 딕트에 sums를 넣어주고, context를 html에 보내줍니다. 

context딕트에 굳이 넣은 후 보내주는 이유는, 이 데이터만 html로 보내는 것이 아니라 다른 여러 정보들도 보내려 하기 때문이에요. 제 코드에서는 index.html이라는 파일로 보내주었어요. 

 

이제 index.html에서 받은 값을 화면에 띄워줘야 합니다. 

context 딕트에서 키값이 sums인 또 다른 딕트의 tan__sum 값을 받아오는 형태가 되니 코드는 아래처럼 입력하면 됩니다. 

그럼 웹사이트 화면에서는 아래처럼 나옵니다. 성공 ^0^

 

728x90

댓글