1 import os
2
3 if __name__ == '__main__':
4 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "book_sys.settings")
5 import django
6 django.setup()
7
8 from show import models
9
10 r = models.Person.objects.exists()
11 ret=models.Author.objects.exists()
12 print(r,ret)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
内置的查询方法:
1 <1> all(): 查询所有结果
2
3 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
4
5 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
6
7 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
8
9 <5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
10
11 <6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
12
13 <7> order_by(*field): 对查询结果排序
14
15 <8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。
16
17 <9> distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)
18
19 <10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
20
21 <11> first(): 返回第一条记录
22
23 <12> last(): 返回最后一条记录
24
25 <13> exists(): 如果QuerySet包含数据,就返回True,否则返回False
单表查询之双下方法:
1 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
2
3 models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
4 models.Tb1.objects.exclude(id__in=[11, 22, 33]) # 相当于 not in
5
6 models.Tb1.objects.filter(name__contains="ven") # 获取name字段包含"ven"的
7 models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
8
9 models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and
10
11 类似的还有:startswith,istartswith, endswith, iendswith
12
13 date字段还可以:
14 models.Class.objects.filter(first_day__year=2017)
关于表的反向查询:
方法一:
1 ret=models.Press.objects.filter(id=3)[0].book_set.all()
注意:models.Press.objects.filter(id=3) 查询出来的值为列表对象,要想使用其继续查询,需要先取出值
方法二:
在主外键关系表里的外键属性添加一个用来反向查询的别名
1 class Book(models.Model):
2 bid=models.AutoField(primary_key=True)
3 bname=models.CharField(max_length=48,null=False,unique=True)
4 press=models.ForeignKey(to='Press',related_name='books') #外键关系
然后通过别名去查询:
1 ret=models.Press.objects.filter(id=2)[0].books.all()
特别注意,如果之前就在外键添加了别名,那么是无法用 表名_set 的方式去操作的
1 book=models.Press.objects.filter(id=3).values_list('books__bname') #结果集取值
1 sh=models.Press.objects.first() #一条结果对象