Django의 ORM 일반 질의 작업 요약

5263 단어 Django
우선 여기에 학생 모델을 하나 제시합니다.
class Student(models.Model):
    name=models.CharField(max_length=10)
    sex = models.IntegerField(choices=((1," "),(2," ")),default=1)
    birth = models.DateField(null=True)
    school=models.CharField(max_length=10,null=True)
    age = models.SmallIntegerField(default=0)
    note=models.CharField(max_length=200,null=True)#  

크거나 크거나 같음:
__gt    >        
__gte      >=

Student.objects.filter(age__gt=10)    //       10    
Student.objects.filter(age__gte=10)  //         10    

    :           ,             。

작음, 작음:
__lt    <
__lte     <=

Student.objects.filter(age__lt=10)     //       10    
Student.objects.filter(age__lte=10)   //         10    

like:
__exact                   like 'aaa'
__iexact                        ilike 'aaa'
__contains                  like '%aaa%'
__icontains      ,      ilike '%aaa%',    sqlite  ,contains        icontains。

in:
__in

            
Student.objects.filter(age__in=[10, 20, 30])

is null/is not null:
__isnull    

Student.objects.filter(name__isnull=True)    //           
Student.objects.filter(name__isnull=False)  //            

다음과 같지 않음/포함되지 않음:
Student.objects.filter().excute(age=10)    //       10   
Student.objects.filter().excute(age__in=[10, 20])  //        [10, 20]    

기타 일반적인 모호 조회:
__startswith  …  
__istartswith  …        
__endswith  …  
__iendswith  …  ,     
__range  …   
__year        
__month        
__day       

다중 테이블 연결 쿼리:
 class A(models.Model):
    name = models.CharField(u'  ')
 class B(models.Model):
    aa = models.ForeignKey(A)

B.objects.filter(aa__name__contains='searchtitle')#  B    aa        name  searchtitle B   。

 
새 QuerySets의 API 반환
   	                  
filter()	              。
exclude()	                 
annotate()	              
order_by()	                
reverse()	            
distinct()	              
values()	                     QuerySet
values_list()	     values()  ,             。
dates()	                     
datetimes()	                 
none()	                   
all()	                   
union()	              
intersection()	      
difference()	      
select_related()	        
prefetch_related()	    
extra()	              SQL  
defer()	                   
only()	                    
using()	                 
select_for_update()	       ,      。
raw()	                   SQL  

1.filter():
filter(**kwargs)

             。

     (**kwargs)              。        AND   。

Student.objects.filter(age__lt=10)#        10        

2.exclude():
exclude(**kwargs)

      QuerySet,                

Student.objects.exclude(age__gt=20, name='lin')#        20     “lin”    

3.annotate():
nnotate(args, *kwargs)

              。

          、   (       )              (   、   )。

annotate()         annotation,        QuerySet     。

        Annotation        Annotation    。                          。                        。                。

  ,        Blog  ,        Blog   Entry:
>>> from django.db.models import Count
>>> q = Blog.objects.annotate(Count('entry'))
# The name of the first blog
>>> q[0].name
'Blogasaurus'
# The number of entries on the first blog
>>> q[0].entry__count
42

4.order_by():
order_by(*fields)

     ,     Meta   ordering   QuerySet        
Student.objects.filter(school="    ").order_by('-age', 'name')
        age    ,     name    。"-age"           。       。      ,  "?",    :
Student.objects.order_by('?')

5. reverse():
reverse()

    QuerySet      。      reverse()         。

    QuerySet       ,     :

my_queryset.reverse()[:5]

  Python            。 Django      。

6.distinct():
distinct(*fields)

           。

     ,QuerySet        。            ,QuerySet         ,       distinct()    。

7. values():
values(fields, *expressions)

            queryset,       。

          ,             。 :

#        Student  
>>> Student.objects.filter(name__startswith='Lin')
]>

#            
>>> Student.objects.filter(name__startswith='Lin').values()


              *fields,   values()        。      ,               / 。        ,                    。  :
>>> Student.objects.filter(name__startswith='Lin').values()


>>> Blog.objects.values('id', 'name')

8.values_list():
values_list(*fields, flat=False)

 values()  ,                 。         values_list()             ,              。    :
>>> Student.objects.values_list('id', 'name')

좋은 웹페이지 즐겨찾기