python에는 hash 함수가 있습니다. 무엇을 하는 함수일까요? 간단하게 hash(1)과 hash('str')을 입력해 보겠습니다. 그랬더니 1과 -34797.. 이 나옵니다. 객체의 hash값을 돌려주기 위해서 쓴다. 정도로 추정할 수 있습니다. 이제, Obj 하나를 정의해 보겠습니다. 생성자에 인자 x를 받습니다. 그러면 Obj의 필드 x에 x의 값을 넣습니다. 이제 Obj(1)의 해시값과, 다른 객체인 Obj(1)의 해시값을 비교해 보겠습니다. 다릅니다. 왜? __hash__가 재정의 되어 있지 않기 때문입니다. 파이썬에서는 dict, counter 등이 hash를 기반으로 동작하는데요. 키 값으로 custom한 객체를 넘겨줄 때 __hash__를 재정의 해야 할 겁니다. 이 __hash__ 안..
분류 전체보기 검색 결과
fastapi에서 일정 주기로 뭔가를 실행시키는 방법이 없을까요? 예를 들어, 자정 12시마다 방문자 수를 초기화 한다던지, 통계 데이터를 수집해야 하는 경우가 있습니다. 이를 cron으로 돌려서 처리할 수도 있습니다만, 여간 귀찮은 것이 아닙니다. celery에는 worker 뿐만이 아니라, 스케쥴러를 등록해서 사용할 수도 있습니다. 간단하게 알아보겠습니다. 프로젝트 구조는 위와 같습니다. core의 celery 안에 있는 base.py로 들어가 보겠습니다. 코드를 보겠습니다. broker와 backend는 redis를 사용하였습니다. 고로 redis 주소를 적어주었습니다. 다음에, include에는 실행할 테스크가 있는 "app.sche.sche"를 적어주었습니다. 위 코드에서는 메세지를 전송하는 주..
안녕하세요. 이번 시간에는 postgresql에서 쓰는 string_agg 함수에 대해 간단하게 알아보겠습니다. 그리고 정렬하는 것과 중복 제거하는 것도 같이 알아볼게요. 먼저, string_agg는 컬럼의 값들을 하나의 string으로 합쳐주는 역할을 합니다. 입력으로 들어오는 row의 속성들을 하나의 string으로 합칠 때 쓰입니다. 이게 무슨 말인가? 예제를 하나 보겠습니다. temp_data를 with 절로 정의했어요. 속성 t의 값이 'a'인 것과, t의 값이 'b'인 것과, 'Z'인 것을 union한 결과를 temp_data로 정의했어요. 이제, temp_data에 있는 내용을 출력해 봅시다. 'c', 'b', 'Z', 'b'가 나옵니다. 이제 이것을 string_agg로 합쳐 보겠습니다. ..
fastapi에서는 application 안에 application을 넣을 수 있습니다. sub application이라고 칭하겠습니다. 이 sub application들을 mount를 하면, 각 어플리케이션 별로 미들웨어 등을 넣을 수 있어요. 분리를 한다? 예를 들어, health check 어플리케이션이랑, api 어플리케이션이랑 분리할 수 있습니다. 이 방법을 간단하게 알아볼 거에요. 먼저 패키지 구조부터 보겠습니다. 별 다른 것은 없고요. sub 패키지 안에 sub_app_1.py와 sub_app_2.py가 있는 구조에요. 먼저 main.py를 보겠습니다. app_1과 app_2를 import 하는데요. 하나는 /sub1에, 다른 하나는 /sub2에 mount 합니다. 여기까지 어렵지 않지요? ..
postgresql에서 with 절은 임시 결과를 정의할 때 유용하였습니다. 이걸 여러 개를 쓸 수 있을까요? 2023년 6월 1일부터 오늘까지 통계치를 뽑고 싶을 때 유용하게 쓰일 법한 예제를 보면서 간단하게 알아보겠습니다. 테이블 d에는 id, s, created 필드가 있습니다. s와 created는 각각 내용과 생성된 날을 의미합니다. 어떤 레코드들이 있는지 보기 위해, select * from d; 를 입력해 보았습니다. 그랬더니 요래 나오는군요. created의 맨 마지막 부분에 +0900이 되어 있는 것으로 보아, 서울 시간으로 되어 있는 것이 분명하군요. 이제 저는 날짜별로 몇 개의 레코드가 생성되었는지 집계하고 싶습니다. 어떻게 하면 될까요? 날짜별로 집계 하려면 group by 날짜를 ..
최근댓글