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')