
IT/파이썬 2023. 5. 4.
Django ORM - aggregation sum 결과가 0 인 결과 배제하기
Django ORM - aggregation sum 결과가 0 인 결과 배제하기 생각해보면 아주 쉽지만 안될지 될지 몰라서 그냥 해봤는데 되네 sum, avg, count 등을 수행한 결과가 0인 경우에 결과 값에서 빼고 싶다면 그냥 exclude 를 이용하면 된다. result_groupby_product_thismonth = ( target_summaryproductcount.values("product_name") .annotate(sum_count=Sum("count")) .values("product_name", "sum_count") .exclude(sum_count=0) ) 상품명으로 Group by 해서 sum을 구했는데, Sum 값이 0면 결과값에서 빼는 코드 참고용입니다. :) http..

IT/파이썬 2023. 5. 3.
Django ORM - Group by 사용해서 Count, Sum, Avg 구하기
Django ORM으로 Group by 필드 구현하는 방법은 아래 글을 이길 수가 없어요. 완전 잘 써놓으셔서 들어가서 읽고 감탄만 하시길!! 정리해 보면, 1. 먼저 Group by 할 필드를 정해서 values에 넣고 .values("필드") 2. 함수를 불러서 쓰고 .annotate(Count(), Sum(), Avg(), ...) 3. 보여줄 필드를 다시 정리하고 .values("필드", "필드", ...) 즉, values 를 2번 불러 쓰면 된다. [Django] ORM으로 Aggregation 함수와 Group by 사용 [Django] ORM으로 Aggregation 함수와 Group by 사용 쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 ..

IT/파이썬 2023. 5. 1.
Django - SQL group by 를 ORM 에서 구현하기
group by는 SQL에서 데이터를 그룹화하는 구문입니다. 장고 ORM에서는 values() 메소드를 사용하여 group by의 대상이 되는 컬럼을 지정할 수 있습니다. 이후 annotate() 함수로 집계된 데이터에서 집계 함수를 실행할 수 있습니다. 예를 들어, 다음과 같은 쿼리는 장고 ORM으로 다음과 같이 표현할 수 있습니다. # SQL SELECT name, COUNT(*) FROM test GROUP BY name; # Django ORM queryset = Test.objects.values('name').annotate(count=Count('*')) 위의 예제에서 values('name')은 GROUP BY name과 동일한 역할을 합니다. 이후 annotate(count=Count('..

IT/파이썬 2023. 5. 1.
Django - ORM aggregation 함수 설명과 예
앞서 살펴본 Group by 하는 결과에 많이 사용되는 집계함수에 대해서도 잠깐 살펴보자. annotate() 구문 안에서 자주 사용되는 aggregation funcion 은 아래 처럼 몇가지를 사용할 수 있다. 장고 ORM에서 사용할 수 있는 주요 집계 함수는 다음과 같습니다. Avg: 평균을 계산합니다. Count: 개수를 계산합니다. Max: 최대값을 계산합니다. Min: 최소값을 계산합니다. Sum: 합계를 계산합니다. 예제로 알아보면 가장 쉽다. 앞서 살펴본 동일한 Test 모델과 값이 있다고 가정한다. 2023.05.01 - [IT/파이썬] - Django - SQL group by 를 ORM 에서 구현하기 Django - SQL group by 를 ORM 에서 구현하기 group by는 S..

IT/파이썬 2023. 4. 18.
Django ORM - Q 객체, F 객체 사용
django orm에서 Q 객체를 사용하면 OR/AND 조건을 적용할 수 있습니다. Q 객체는 복잡한 조건식을 표현할 수 있도록 도와주는 객체로, 논리 연산자 (|, &, ~)를 사용할 수 있습니다1. 예를 들어, filter(Q(name=“lee”) | Q(age__gt=20))는 name이 "lee"이거나 age가 20보다 큰 레코드를 필터링합니다1. Q 객체는 filter(), exclude(), get() 등의 메소드에 인자로 전달할 수 있습니다2. Q 객체끼리는 연결하여 사용할 수 있습니다2. 예를 들어, filter(Q(name=“lee”) & Q(age__gt=20), Q(gender=“M”))는 name이 "lee"이고 age가 20보다 크며 gender가 "M"인 레코드를 필터링합니다2...

IT/파이썬 2023. 4. 18.
Django ORM - 중복 레코드 제거 방법
django orm에서 중복 레코드를 삭제하는 방법은 다음과 같습니다. 중복 레코드를 삭제하려면 먼저 중복 조건을 정의해야 합니다. 예를 들어, name과 age 필드가 모두 같은 레코드를 중복으로 간주한다면, filter(name__exact=F(‘age’))와 같이 filter() 함수에 Q 객체나 F 표현식을 사용할 수 있습니다 중복 조건에 맞는 레코드들의 id를 values_list() 함수로 추출합니다. 이때 flat=True 옵션을 주면 id 값들이 리스트 형태로 반환됩니다. 예를 들어, ids = Person.objects.filter(name__exact=F(‘age’)).values_list(‘id’, flat=True)와 같이 사용할 수 있습니다. 중복 조건에 맞는 레코드들 중에서 하나..

IT/DB 2021. 6. 9.
Flask mongoengine Objects() 와 Objects.get() 차이점
문제 정의는 flask mongoengine 에서 하고 있지만, mongoengine 이라는 것이 Django ORM 특성을 가져온 것으로 알고 있어 비스무리 한 곳을 찾아보았다. 원하는 답은 찾은 듯 하여 여기에 남겨두다. 머 쉽게는 리스트를 리턴해야 하는데 Objects.get()을 쓰면 제일 첫번째 놈 object 만 리턴한다는 것! https://code4human.tistory.com/81 [Django] Django의 ORM : get() 과 filter() 비교 Django ORM을 작성하면서 SQL문을 확인하곤 한다. 오류를 발견하면서 헷갈리는 get() 과 filter()을 간단히 정리한다. fetchone # ORM User.objects.get(id=1) #Return : Object..
