StoryCode

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