DJango.ORM
Python, 파이썬반응형
참조) https://www.slideshare.net/EunhyangKim2/ss-118560530
# 앞 부분만 정리.
포스트 다 가져오기 | Post.objects.all() |
포스트 1개 가져오기 | Post.objects.get(id=1) |
내가 쓴 포스트 가져오기 | Post.objects.filter(username="hyang") |
머신 러닝 모델의 여러 버전마다 실행된 것들에서 8월 1일에서 8월20일까지 실행된 것 들 중 error 없이 실행된 active 한 것들만 모아서, 응답시간의 평균값, 최대값, 그리고 모델에 설정한 스레숄드 값보다 빠르게 응답한 개수 가져오기 |
#머신 러닝 모델의 여러 버전마다 실행된 것들에서 8월 1일에서 8월20일까지 실행된 것 들 중 error 없이 실행된 active 한 것들만 모아서 run_qs = Run.objects.filter( version__id__in=version_ids, ml_model__id__in=version_ids, is_active=True requested_at__range=(start_date, end_date) ) |
# 응답시간의 평균값, 최대값 run_qs.aggregate(Avg('response_time'), Max('response_time')) |
# 그리고 모델에 설정한 스레숄드 값보다 빠르게 응답한 개수 가져오기 run.response_time > ml_model.threshold인 run 의 총개수 ? 특정기준으로 값을 묶어 새로운 컬럼 만들때는 annotation! run_qs.annotate( fast_runs=Count( Case( When(response_time__gt=F('ml_model_threshold'), then=1), output_field=IntegerField(), ) ) ).aggregate(Sum('fast_runs')) |
ForeignKey | select_related |
ManyToManyField | preFetch_related |
# select_related : 데이타는 한꺼번에 가져와야 한다. class Post(models.Model): author = models.ForeignKey(Author) tag = models.ManyToManyField(Tag) 1) 아래 경우는 각 문장이 각각 한번씩 query 해서 두번 가져온다. post = Post.objects.get(id=1) author = post.author 2) 위를 한번에 가져오려면 아래와 같이 변경한다. post = Post.objects.select_related('author').get(id=1) author = post.author |
|
# prefetch_related : 1) 아래 경우는 post 하나 돌때마다 가져온다. posts = Post.objects.all() for post in posts: for tag in post.tag_set.all(): print(tag) 2) posts = Post.objects.all().prefetch_related('tag_set') for post in posts: for tag in post.tag_set.all(): print(tag) |
|
# 불필요한 컬럼은 다 가져오지 않는다. posts = Post.objects.values('name') for post in posts: print(post.name) |
|
# 필요한 것만 가져오기 1) 아래 경우는 If posts: 문장이 모든 데이타를 다 가져온다. posts = Post.objects.all() If posts: # print(posts) 2) 이를 아래와 바꾸는 것이 좋다. If posts.exists() |
참고 ) Django-debug-toolbar 에서 ORM 이 실제 쿼리를 어떻게 날렸는지 확인가능하다. |
반응형
'Python, 파이썬' 카테고리의 다른 글
디렉토리검색 (0) | 2020.02.13 |
---|---|
DJango 의 장점 (0) | 2020.02.12 |
Django Rest FrameWork (0) | 2020.02.07 |
기본문법 (0) | 2020.02.06 |
DJango (Windows) (0) | 2020.01.31 |