ORM多表分组、F与Q查询

编辑本博客

一、分组查询

先连接表,再分组查询

需求:查询每一个出版社出版的名称以及书籍个数

SQL连接表:

SELECT * FROM app_book INNER JOIN app_publish on app_book.publish_id = app_publish.nid

ORM连接表:

Book.objects.values("publish").values()

SQL链表后分组:

SELECT count(title),app_publish.name FROM app_book INNER JOIN app_publish on app_book.publish_id = app_publish.nid GROUP BY publish_id

ORM链表后分组,方式一:

Publish.objects.values("name").annotate(Count("book__title"))

ORM链表后分组,方式二:

通过values拿所需数据即可

Publish.objects.values("nid").annotate(c=Count("book__title")).values(‘name‘,"c")

练习二:

查询每一个作者的名字以及出版过的书籍的最高价格

SQL语法:

SELECT app_author.name,max(price) FROM app_author INNER JOIN app_book_authors ON app_author.nid = app_book_authors.author_id INNER JOIN app_book ON app_book_authors.book_id = app_book.nid ORDER BY app_author.nid

ORM操作:

原文地址:https://www.cnblogs.com/yaya625202/p/9302226.html

时间: 2024-10-11 17:35:38

ORM多表分组、F与Q查询的相关文章

68 聚合和分组, F和Q查询, cookie, session

主要内容: 1  聚合和分组: a : 先导入聚合函数: from django.db.models import  Max, Min, Avg, Count, Sum b : 可以为聚合函数设置名字:  max = Max('price') c : 聚合用到了aggregate,  是queryset的一个终止语句,  获取的结果是一个字典的形式. 1 from django.db.models import Avg, Sum, Max, Min, Count 2 ret = models.B

Django ORM 之F、Q查询与事务

内容目录 一.F.Q查询 二.事务 三.only与defer 一.F.Q查询 """ Product表中的数据: 1 橡皮 2 2000 3000 2 铅笔 3 12 200 3 华为保时捷 18000 30 23 4 索尼A6000 3680 24 12 """ # 查询卖出数大于50的商品 # res = models.Product.objects.filter(maichu__gt=50) # <QuerySet [<Prod

django之 F与Q查询

F与Q查询 F查询 why??????? 我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? answer:Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. show time (我们来演示以下啪)??? 1 from django.db import models 2 3 # Create your models here. 4 5 class Produ

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

聚合与分组查询,F与Q查询

from django.db.models import Q 查询书籍名称是python入门或者价是555.55的书 book_queryset = models.Book.objects.filter(Q('title'='python入门')|Q('price'=555.55)) print(book_queryset) Q查询进阶用法 用Q产生对象 然后再使用 q = Q() q.connector('or') 添加查询条件 title__icontains为查询条件,同其他查询方式的写法

F与Q查询

F查询: 之前构造的过滤器都是将字段值与某个我们设定的常亮做比较,如果我们要对两个字段的字段的值做比较久需要用到F查询:F查询可以用来比较同一个model事例中两个不同字段的值, 准备工作: 创建数据库,使用orm创建表,使用Navicat添加数据,也可以使用pycharm中的database功能连接mysql添加数据 from django.test import TestCase # Create your tests here. import os import sys if __name

ORM多表操作之一对多查询之对象查询

一对多:book_obj.publish 一定是一个对象,子表找主表 pub_obj.book_set.all() 主表找子表 原文地址:https://www.cnblogs.com/jintian/p/11167050.html

ORM多表操作之一对多查询之下划线查询

Book.objects.filter(publish__name=" ").values() 正向查询用外键,反向查询用类名 Publish.objects.filter(book__name="python").values() Book.objects.filter(name="python").values("publish__name") 原文地址:https://www.cnblogs.com/jintian/p/