Django/orm

· Django/orm
회사에서 비정규화를 할 일이 있었는데 데이터가 10만건이 넘어서 실 서버에 db히트 하는 만큼 성능에 신경을 써야됬습니다.그래서 쿼리를 불러 올 때 가장 빠르게 처리하는 방식이 무엇일 지 궁금해졌습니다.count(), annotate(Count()), len(prefetch)를 떠올렸고 비교해 봤습니다.count().count()의 경우 db에서 count를 해서 가져오는 방법입니다db에서 연산을 끝낸 후 가져오는 만큼 cpu와 메모리에는 부담이 없습니다. .count()는 일단 조건을 사용 할 수  없습니다. 연관 된 모든 객체를 count하기 때문에 soft delete된 것이나 filter 조건을 넣을 수 없습니다. soft 삭제를 구현하고 있는 테이블이라 필터 조건이 필요한 만큼 사용 할 수는 없..
· Django/orm
update_or_createDjango orm을 다루며 객체가 있으면 객체로 불러와서 사용하고 없으면 create를 해서 사용하려고 하는데 create 시 필수 값을 넣어줘야 했습니다. 그래서 if 문을 통해 분기를 하면 코드가 길어져 가독성이 떨어졌습니다.그래서 다른 방법이 있나 찾다가 update_or_create를 발견했습니다. Django의 update_or_create 메소드는 객체를 업데이트하거나 존재하지 않으면 생성하는 작업을 간편하게 처리할 수 있는 메소드입니다.update_or_create(defaults=None, **kwargs) defaults: 객체를 생성하거나 업데이트할 때 사용될 필드와 값을 포함하는 사전(dict).**kwargs: 객체를 조회할 때 사용할 필터 조건을 키워..
· Django/orm
https://pypy.dev/serverless/dynamodb-scan-vs-query/ DynamoDB Scan vs Query TL;DR 개요 Scan vs Query Scan Query 어떨 때 Scan 을 쓰고 어떨 때 Query 를 쓰나요? 검색하고자 하는 값이 한개인 경우 검색하고자 하는 값이 여러개인 경우 (번외) index 로컬 보조 인덱스(LSI) 글로벌 보조 pypy.dev 앞서 query를 사용해서를 구현했었는데 query에 filter을 걸 일이 있어서 기능을 찾아보던 도중 Scan을 통해 구현했었는데 Scan과 query의 차이점이 궁금해서 찾아봤습니다 위의 블로그에서 정리를 잘해둬서 가져왔습니다 3줄 요약 scan은 전체를 읽어오기 때문에 가능하면 query로 query는 p..
· Django/orm
https://yoo11052.tistory.com/174 [AWS] DynamoDB란 DynamoDB DynamoDB는 AWS에서 제공하는 서버리스 기반 Key-Value NoSQL 데이터베이스입니다. DynamoDB를 사용하면 높은 성능과 비용적인 측면에서 이점을 가져올 수 있습니다. DynamoDB 특징 NoSQL 데이터베이스 yoo11052.tistory.com DynamoDB가 무엇인지는 위의 블로그에서 잘 나타내주고 있습니다 3줄 요약: Key-Value 데이터베이스 입니다 서버리스이기에 요청한 만큼만 비용을 지불하면 됩니다. Django에서 DynamoDB를 사용하기 위해 Amazon Web Services (AWS)의 파이썬 SDK인 boto3를 사용해야 합니다 pip install bot..
· Django/orm
시작 날짜와 끝 날짜 데이터를 받아와서 날짜별 필터링을 하는 것은 많은 곳에서 쓰이는 방법이다 start_date = request.query_params.get('start_date') end_date = request.query_params.get('end_date') filter(created_at__range=(start_date, end_date)) 나도 이렇게 쿼리를 받아와서 filter을 걸었는데 필터링이 원하는 대로 하루가 되는 것이 아닌 end_date 전 날 까지만 되는 상황이 발생했다 그러한 이유는 받아오는 시간이 YYYY-mm-dd 이니까 뒤에 시간대를 00으로 잡아서 필터링 걸기 때문이였다. 그래서 날짜에 하루를 추가하던가 range는 include하게 잡으니까 lte, gt를 사..
· Django/orm
F() F()는 model field의 값, 변환된 값, 주석이 달린 열을 나타냅니다. 모델 field의 값을 참조하고 실제로 db에서 python 메모리로 가져오지 않고 이를 사용해 db 작업을 할 수 있습니다. 대신 Django는 F()를 사용해서 db 수준에서 필요한 작업을 설명하는 SQL 표현식을 생성합니다. reporter = Reporters.objects.get(name='Tintin") reporter.stories_field += 1 reporter.save() 위 코드에서 db에서 reporter.stories_field의 값을 메모리로 끌어오고 python 연산자를 이용해서 작업한 뒤 다시 개체를 db에 저장했습니다. from django.db.models improt F report..
· Django/orm
dict를 통해서 총 갯수를 구하는 total_count를 구현 중에 문득 len()은 db히트가 더 작은데 왜 시간이 더 느릴까에 대해 고민을 하게 됬다. django는 count() 메서드를 특별한 방시긍로 최적화하고 len()을 사용하면 QuerySet을 강제로 평가해서 필요하지 않은 경우에도 전체 결과를 가져오고 count()는 SQL의 COUNT 집계 함수를 사용해서 빠르게 결과를 가져오기 떄문에 count가 더 빠르다 아래는 우리 gpt 형님의 답변입니다 두 가지 방법을 비교하여 어떤 것이 "좋다"는 것은 맥락에 따라 다를 수 있습니다. 그러나 주로 Django의 QuerySet에는 count() 메서드가 이미 내장되어 있으므로 len() 함수 대신 count() 메서드를 사용하는 것이 더 효..
· Django/orm
exclude안에 두 개의 조건을 넣고 코드를 잘 넣어줬는데도 조건이 먹히지 않는 경우가 발생했다. .exclude(id__in=OwnerPlace.objects.values_list('place'), categories__id=exclude_category.id) .exclude(Q(id__in=OwnerPlace.objects.values_list('place')) | Q(categories__id='a78312ef-865e-4e87-ae2c-d761131f4ae5')) exclude는 기본적으로 and 조건으로 여러 조건을 결합하기에, 두 개의 조건을 넣게 되면 두 조건을 만족하는 객체 만이 대상에서 제외 되기 때문에 앞의 현상이 발생했던 것이다. 그래서 밑의 코드와 같이 Q객체를 이용해 or 조..
두잇 두두
'Django/orm' 카테고리의 글 목록