django---orm 进阶查询

#一般查询即单表内查询
print(Author.objects.all())
print(Author.objects.order_by('first_name')[0])   #0个表示id=1

#关联查询  BookpublisherFK关系
obj=Book.objects.get(publisher__name__contains='吉林')  #只适合出版社包含一本书的查找
print(obj)   #返回的是该出版社相关的书的名字

#两个字段比较大小
objs=Book.objects.filter(count__lt=F('book_comment'))  #找到count<book_commentBook F()专门取函数的某列值操作,执行不经过python解释器,不经过本机内存,是生成 SQL语句的执行。
print(objs)

#复杂查询
objs=Book.objects.filter(Q(count__lt=F('book_comment'))|Q(publisher_date__gt='2018-05-08'))  #Q函数为对对象的复杂查询
print(objs)

#聚合查询
print(Book.objects.all().aggregate(Avg('book_comment'),Sum('book_comment'),Max('book_comment')))  #聚合  求均值 等

pub_obj=Publisher.objects.first()  #聚合
print(pub_obj)
print(pub_obj.book_set.select_related())

pub_objs=Publisher.objects.annotate(book_nums=Count('book'))  #分类聚合
for pub_obj in pub_objs:
    print(pub_obj.book_nums)


print(Book.objects.values_list('publisher_date').annotate(Count('publisher_date')))  #对表内字段的分类聚合

猜你喜欢

转载自blog.csdn.net/beifangdefengchuilai/article/details/80886446
今日推荐