配置临时脚本启动Django 及 ORM查询的13种方法

 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()     #一条结果对象
原文地址:https://www.cnblogs.com/wen-kang/p/9583101.html