Django QuerySet 커넥터(진급편)

1322 단어 Djangodjango
일반적인 인터페이스 외에 성능을 향상시키는 인터페이스도 있는데 Django 프로젝트를 최적화할 때 특히 이 몇 가지 인터페이스의 사용법을 고려해야 한다
  • defer 인터페이스.보여줄 필요가 없는 필드를 지연 불러옵니다. 예를 들어 글에서 본문을 제외한 다른 필드를 가져와야 합니다. 그러면 기록에 콘텐츠 부분이 포함되지 않습니다.그러나 만약 우리가 이 필드를 사용해야 한다면, 사용할 때 다시 불러오기:
    posts = Post.objects.all().defer('content')
    for post in posts:  #          
        print(post.content)  #         ,  content
  • only 인터페이스.defer 인터페이스와는 정반대입니다. 모든 타이틀 기록만 얻으려면only를 사용할 수 있습니다.
  • select_related 인터페이스바로 외부 키가 발생하는 N+1 문제를 해결하는 데 사용되는 것이다. 즉, 하나의 조회 요청이 N개의 데이터
    posts = Post.objects.all()
    for post in posts:  #        
        print(post.owner)  #           
    를 되돌려 달라는 코드는 위와 유사하지만 여기서 사용하는 것은 owenr(연관표) 해결 방법은 다음과 같다.
    posts = Post.objects.all().select_related('category')
    for post in posts:
        print(post.category)
    일대일 필드(OneToOneField)와 외부 키 필드(ForeignKey)는 select 를 사용할 수 있다.related에서QuerySet을 최적화하고QuerySet에서selectrelated () 함수를 사용하면 Django는 상응하는 외부 키에 대응하는 대상을 가져와서 나중에 필요할 때 데이터베이스를 조회할 필요가 없습니다.

  •  
  • prefetch_related 인터페이스여러 쌍의 관계를 가진 데이터에 대해 이 인터페이스를 통해 N+1 조회를 피할 수 있다.예를 들어post와tag의 관계는 이런 방식으로 피할 수 있다
    posts = Post.objects.all().prefetch_related('tag')
    for post in posts:  #         ,    post tag
        print(post.tag.all())
  • 좋은 웹페이지 즐겨찾기