08 - 모델 - 조건 조회

  • 필드 조회
  • sql 의 where 기능 을 실현 하고 필터 filter (), exclude (), get () 을 호출 합 니 다. 다음은 filter () 를 예 로 들 면
  • '속성 명 id' 를 통 해 외부 키 에 대응 하 는 대상 의 id 값 을 표시 합 니 다
  • 문법 은 다음 과 같다
  • 설명: 속성 이름과 비교 연산 자 사이 에 두 개의 밑줄 을 사용 하기 때문에 속성 명 은 여러 개의 밑줄 을 포함 할 수 없습니다.
  • 속성 명비교 연산 자 = 값

  • 조건 연산 자
  • exact: 판정 등
  • 예: 조회 번호 가 1 인 도서
    list=BookInfo.books.filter(id__exact=1)
        :
    list=BookInfo.books.filter(id=1)
    
  • contains: 포함 여부
  • 설명:% 를 포함 하려 면 전의 가 필요 없 이 바로 쓰 면 된다
  • 예: 책 제목 에 '전' 이 포 함 된 도 서 를 조회 합 니 다.
  • list = BookInfo. books. filter (btitle contains = '전송')
  • startswith, endswith: 지정 한 값 으로 시작 하거나 끝 납 니 다
  • 예: 책의 제목 이 '부' 로 끝 나 는 도 서 를 조회 합 니 다.
  • list = BookInfo. books. filter (btitle endswith = '부')
  • isnull: null 인지 여부
  • 예: 책 이름 이 비어 있 지 않 은 도서 목록 을 조회 합 니 다 = BookInfo. books. filter (btitle isnull = False)
  • 이상 연산 자 는 모두 대소 문 자 를 구분 합 니 다. 이 연산 자 앞 에 i 를 붙 여 대소 문 자 를 구분 하지 않 음 을 표시 합 니 다. 예 를 들 어 iexact, icontains, istartswith, iendswith
  • in: 범위 내 포함 여부
  • 예: 조회 번호 가 1 또는 3 또는 5 인 도서 list = BookInfo. books. filter (pk in = [1, 3, 5])
  • lt, gte, lt, lt: 크 고 크 며 같 으 며 작 으 며 같다.
  • 예: 조회 번호 가 3 이상 인 도서 list = BookInfo. books. filter (id gt = 3)
  • 같은 연산 자 를 사용 하 는 것 과 같 지 않 습 니 다. exclude () 필 터 를 사용 하 십시오. 조회 번호 가 3 과 같 지 않 은 도서 list = BookInfo. books. exclude (id = 3)
  • 다양한 조회 year, month, day, weekday, hour, minute, second: 날짜 시간 유형의 속성 을 연산 예: 1980 년 에 발 표 된 도서 list = BookInfo. books. filter (bpub date year = 1980)
  • 를 조회 합 니 다.
  • 날짜 조회 1 예: 1980 년 1 월 1 일 이후 발 표 된 도서 list = BookInfo. books. filter (bpub date gt = date (1990, 1, 1) 날짜 조회 2
  • 관련 조회 (외부 연결 유사)
  • Django 에서 도 join 조회 와 유사 한 문법 을 다음 과 같이 실현 할 수 있 습 니 다.
  • 관련 모델 클래스 이름 소문 자 속성 명 연산 자 = 값
  • ' 연산 자' 부분 이 없 으 면 sql 의 inner join 과 같 음 을 나타 낸다.
  • 예: 도 서 를 조회 하고 도서 에서 영웅 의 묘 사 는 '8'
  • 을 포함 하도록 요구한다.
        list = BookInfo.books.filter(heroinfo__hcontent__contains=' ')
    
  • 예: 책 제목 이 '천 룡 8 부' 인 모든 영웅 조회
  •     list = HeroInfo.objects.filter(hbook__btitle='    ')
    

  • F 대상 이전의 조 회 는 모두 대상 의 속성 과 상수 치 를 비 교 했 는데 두 속성 을 어떻게 비교 합 니까?답: F 대상 을 사용 하여 django. db. models 에서 문법 은 다음 과 같 습 니 다.
  • F (속성 명) 예: 조회 독 서량 이 평 론 량 보다 많은 도서
  • from django.db.models import F
    ...
    list = BookInfo.books.filter(bread__gte=F('bcommet'))
    
  • F () 대상 에서 산수 연산 예 를 사용 할 수 있다. 독 서량 이 2 배 이상 인 도서 조회
  • list = BookInfo.books.filter(bread__gt=F('bcommet') * 2)
    
  • Q 개체
  • 여러 필 터 를 하나씩 호출 하여 논리 와 관 계 를 나타 내 고 sql 구문 에서 where 부분의 and 키워드
  • 와 같 습 니 다.
  • 예: 조회 독 서량 이 20 보다 많 고 번호 가 3 보다 작은 도서 list = BookInfo. books. filter (bread lt = 20, id lt = 3) 또는 list = BookInfo. books. filter (bread lt = 20). filter (id lt = 3)

  •     3.          or   ,    Q()    |   
        4. **Q     django.db.models **
            1.     
                Q(   __   = )
                1.  :       20   ,   Q    
                from django.db.models import Q
                ...
                list = BookInfo.books.filter(Q(bread__gt=20))
                
    
            2. Q      &、|  ,**&     ,|     **
                1.  :       20,     3   ,    Q    
                list = BookInfo.books.filter(Q(bread__gt=20) | Q(pk__lt=3))
            
    
        5. Q       ~   ,   not
            1.  :       3   
            list = BookInfo.books.filter(~Q(pk=3))
    
  • 집합 함수
  • aggregate () 필 터 를 사용 하여 취 합 함수 취 합 함 수 를 호출 합 니 다. Avg, Count, Max, Min, Sum 은 django. db. models 에 정의 되 었 습 니 다.
  • 예: 도서 의 총 독 서량 조회
  • from django.db.models import Sum
    ...
    list = BookInfo.books.aggregate(Sum('bread'))
    
  • 서버 명령 행 을 실행 하면 list 사전 결 과 를 볼 수 있 습 니 다
  • count 사용 시 aggregate () 필 터 를 사용 하지 않 습 니 다.
  • 예: 도서 총수 목록 조회 = BookInfo. books. count ()
  • 서버 명령 행 을 실행 하면 list 결 과 를 볼 수 있 습 니 다
  • 관련 조회 연습
  • 관련 조 회 는 모델 유형 을 정의 할 때 세 가지 관련 관 계 를 지정 할 수 있 습 니 다. 가장 많이 사용 되 는 것 은 한 쌍 의 다 중 관계 입 니 다. 예 를 들 어 본 사례 에서 '도서 - 영웅' 은 한 쌍 의 다 중 관계 이 고 그 다음 에 셸 연습 관계 에 들 어간 조회 python manage. py 셸 입 니 다.
  • 조회 번호 가 1 인 도서 북 = BookInfo. books. get (pk = 1)
  • 북 도 서 를 획득 한 모든 영웅 북. heroinfoset.all()
  • 번 호 를 1 로 받 은 영웅 hero = HeroInfo. objects. get (pk = 1)
  • 영웅 이 나 온 도서 hero. hbook
  • 획득

    관련
  • 지역 정보, 분류 정보 등 데이터 에 대해 표 구조 가 매우 유사 하고 표 마다 데이터 양 이 매우 제한 적 이다. 데이터 표 의 대량의 데이터 저장 기능 을 충분히 이용 하기 위해 표 로 디자인 할 수 있다. 내부 의 관계 필드 는 본 표 의 메 인 키 를 가리 키 는데 이것 이 바로 관련 표 구조
  • 이다.
  • booktest / models. py 파일 을 열 고 areaInfo 류 설명 을 정의 합 니 다. 관계 속성 은 self 를 사용 하여 이 종 류 를 가리 키 며 null 과 blank 가 비어 있 도록 허용 해 야 합 니 다. 1 급 데 이 터 는 부모 급 이 없 기 때 문 입 니 다
  • 지역 모델 류 를 정의 하고 성, 시, 구 현 정보 저장
    class AreaInfo(models.Model):
        atitle=models.CharField(max_length=30)#  
        aParent=models.ForeignKey('self',null=True,blank=True)#  
    
  • 이전
  • python manage.py makemigrations python manage.py migrate

  • my sql 명령 행 을 열 고 데 이 터 를 가 져 옵 니 다.
  • source areas.sql

  • booktest / views. py 파일 을 열 고 보기 영역
    from models import AreaInfo
    ...
    #        
    def area(request):
        area = AreaInfo.objects.get(pk=440100)
        return render(request, 'booktest/area.html', {'area': area})
    
    
  • 을 정의 합 니 다.
  • booktest / urls. py 파일 을 열 고 url
    urlpatterns = [
        ...
        url(r'^area/$', views.area),
    ]
    
  • 을 새로 만 듭 니 다.
  • templates / booktest 디 렉 터 리 에 area. html 파일 을 새로 만 듭 니 다
    
    
          
    
    
        :{{area.atitle}}
    
    :{{area.aParent.atitle}}
      {%for a in area.areainfo_set.all%}
    • {{a.atitle}}
    • {%endfor%}
  • 서버 python manage. py runserver 실행


  • 총화
  • 설정 파일 을 수정 하여 my sql 데이터 베 이 스 를 사용 합 니 다
  • 속성 유형 및 옵션
  • 사용자 정의 관리자 및 용도
  • 조회 집합 과 조건 조회
  • 관련
  • 좋은 웹페이지 즐겨찾기