查询今天,昨天,一周的用户数。 2. 最近一个月,分组统计每一天的数量 3....最近1年,分组统计每一个月的数量 二、项目演示 新建一个项目,名字为:test_rom,应用名称为:application django版本为:3.0.8 settings.py 修改时区,内容如下:...time.localtime(time.time())) this_month = time.strftime("%m", time.localtime(time.time())) # 按天分组...time_ago = datetime.datetime.now() - relativedelta(years=1) # print("time_ago",time_ago) # 获取近一年数据...访问最近一个月分组数据 http://127.0.0.1:8001/month/ 效果如下: ? 访问最近一年的分组数据 http://127.0.0.1:8001/year/ 效果如下: ?
查询书名为空的图书 查询编号为1或3或5的图书 查询编号大于3的图书 查询1980年发表的图书 查询1990年1月1日后发表的图书 1)相等 exact:表示判等。...>>> BookInfo.objects.filter(pub_date__year=1980) ]> 例:查询1990年1月1日后发表的图书。...QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
例:查询1980年发表的图书。 list = BookInfo.objects.filter(bpub_date__year=1980) 例:查询1980年1月1日后发表的图书。...我们使用原生SQL语句,按照部分分组求平均工资: select dept,AVG(salary) from employee group by dept; ORM查询: from django.db.models...判断某一个查询集中是否有数据: exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。 注意:不支持负数索引。 对查询集进行切片后返回一个新的查询集,不会立即执行查询。
我们使用原生SQL语句,按照部门分组求平均工资: select dept,AVG(salary) from employee group by dept; ORM查询: from django.db.models...by dept_id; ORM查询: from django.db.models import Avg models.Dept.objects.annotate(avg=Avg("employee__..., "month"(年-月), "day"(年-月-日) # order只能是:"ASC" "DESC" # 并获取转换后的时间 - year : 年-01-01...- month: 年-月-01 - day : 年-月-日 models.DatePlus.objects.dates('ctime','day','DESC') def...执行原生SQL的方法 Django ORM执行原生SQL
Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...''' 正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表 ''' 一对多查询 # 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多) # 正向查询 按字段...总结 :跨表分组查询本质就是将关联表join成一张表,再按单表的思路进行分组查询。... .annotate(num_authors=Count('authors')) .filter(num_authors__gt=1) (5) 根据一本图书作者数量的多少对查询集...bookList=Book.objects.filter(Q(authors__name="yuan")|Q(authors__name="egon")) 等同于下面的SQL WHERE 子句: WHERE
正向查询(按字段:authors): 反向查询(按表名:book_set): 注意: 你可以通过在 ForeignKey() 和ManyToManyField的定义中设置 related_name...''' 基于双下划线的查询就一句话:正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表,一对一、一对多、多对多都是一个写法,注意,我们写orm查询的时候,哪个表在前哪个表在后都没问题...、分组查询、F查询和Q查询 聚合 aggregate(*args, **kwargs) # 计算所有图书的平均价格 >>> from django.db.models import Avg...总结 :跨表分组查询本质就是将关联表join成一张表,再按单表的思路进行分组查询,,既然是join连表,就可以使用咱们的双下划线进行连表了。 ...=Count('authors')) .filter(num_authors__gt=1) #filter也是也可以是querset来调用 (5) 根据一本图书作者数量的多少对查询集
对象和关系之间并不是完美映射 一般来说 ORM 足以满足我们的需求,如果对性能要求特别高或者查询十分复杂,可以考虑使用原生 SQL 和 ORM 共用的方式 Django ORM 在 Django 框架中集成了...`id`) # WHERE `orm_author`.`name` = 'zjk' 限制 QuerySet 有时候我们并不需要获取查询集的全部数据,而只需要一个子集,一个常见的场景就是进行分页查询。...`id` = 1 迭代:在首次迭代查询集时会执行数据库查询 切片(限制查询集):对查询集执行切片操作时,指定 step 参数 序列化/缓存 repr:对查询集调用 repr 函数 len:对查询集调用...len 函数 list: 对查询集调用 list() 方法强制求值 bool:测试一个查询集的布尔值,例如使用bool(), or, and 或者 if 语句都将导致查询集的求值 缓存 每个 QuerySet...annotate 默认按照 id 进行分组,如果需要按其他字段分组,要结合 values /values_list 方法。
我们使用原生SQL语句,按照部分分组求平均工资: select dept,AVG(salary) from employee group by dept; ORM查询: from django.db.models...by dept_id; ORM查询: from django.db.models import Avg models.Dept.objects.annotate(avg=Avg("employee__...同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询。 示例:查询作者名字是小仙女并且不是2018年出版的书的书名。..., "month"(年-月), "day"(年-月-日) # order只能是:"ASC" "DESC" # 并获取转换后的时间 - year : 年-01-01...- month: 年-月-01 - day : 年-月-日 models.DatePlus.objects.dates('ctime','day','DESC') def
添加表记录 基于对象的连表查询 一对一查询 一对多查询 多对多查询 连续跨表 打印Django查询数据的SQL语句 基于双下划线查询 聚合查询 分组查询 F查询...ret.query) #endswith ret=models.Book.objects.filter(name__endswith='梦') print(ret) #pub_date__year 按年查询...正向:正向查询按字段 反向查询:反向按表名小写_set.all() 4******基于对象的查询,多次查询(子查询) 打印Django查询数据的SQL语句...总结 :跨表分组查询本质就是将关联表join成一张表,再按单表的思路进行分组查询。 ...数据库中字段是否可以建立唯一索引 unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引 unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
目录 Django ORM 多表操作(二) 多对多操作常用API 分组查询 单表分组查询示例 多表分组查询练习 查询练习 ORM 事务 ORM 常见字段和参数 ORM常见字段 ORM 常见参数 choices...分组查询一般会用到聚合函数,所以使用前要先从 django.db.models 引入 Avg,Max,Min,Count,Sum(首字母大写) from django.db.models import...''' ret=Emp.objects.all().annotate(Avg('salary')) print(ret) 多表分组查询练习 '''多表分组查询''' # 查询每一个出版社出版的书籍个数...values('name','book_num') print(res) # 6、根据一本图书作者数量的多少对查询集...ordering 指定默认按什么字段排序,只有设置了该属性,我们查询到的结果才可以被reverse() class UserInfo(models.Model): nid =
User.objects.all()[3:] # offset,取出结果的第10-20条数据(不包含10,包含20),也没有对应SQL,参考上边的SQL写法 User.objects.all()[10:20] # 分组...datetime.date(2018, 8, 1)) User.objects.filter(create_time__date__gt=datetime.date(2018, 8, 2)) # 匹配年,...year,相同用法的还有匹配月month,匹配日day,匹配周week_day,匹配时hour,匹配分minute,匹配秒second User.objects.filter(create_time__...) # get_object_or_404方法,它会先调用django的get方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http...中能用ORM的就用它ORM吧,不建议执行原生SQL,可能会有一些安全问题,如果实在是SQL太复杂ORM实现不了,那就看看下边执行原生SQL的方法,跟直接使用pymysql基本一致了 from django.db
一 、ORM 查询性能 ① 普通查询 #for循环10次发送10次数据库查询请求 obj_list=models.Articles.objects.all() for row in obj_list...分组和聚合查询 ① aggregate(*args,**kwargs) 聚合函数 通过对 QuerySet 进行计算,返回一个聚合值的字典。...即在查询集上生成聚合。...from django.db.models import Avg,Sum,Max,Min #求书籍的平均价 ret=models.Book.objects.all().aggregate(Avg('price...')) #{'price__avg': 145.23076923076923} ② annotate(*args,**kwargs) 分组函数 #查看每一位作者出过的书中最贵的一本(按作者名分组 values
id" = 3; 四、ORM查询 1....聚合查询和分组查询 1.aggregate 通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。...from django.db.models import Avg,Min,Sum,Max # 从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。...,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。...(authors__name='teQ').annotate(Sum('price')) # 每一个作者出版过的书中,最高价:按作者名分组 ret = Book.objects.values("authors
目录 Django ORM ORM实操之数据库迁移 ORM实操之字段的修改 ORM实操之数据的增删改查 数据库同步 ORM创建表关系 Django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析...无名分组和有名分组反向解析 Django ORM ORM:对象映射关系程序 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了...实操之数据的增删改查 查询操作 username = request.POST.get('username') # 获取用户post从页面提交的数据,username是获取到用户提交的数据 # 1.查询数据...,当作了视图函数的第二个位置参数''' 有名分组 在使用路由的时候,正则表达式可以起别名,别名当作关键字参数传给视图函数; 没有按关键字参数写报错 按别名,传参 '''urls.py...,无名对应位置参数,有名对应关键字参数 分组了,一定要记得传参数,无名分组传位置参数,有名分组传关键字参数 需要注意的是django2.0版本的变化,path和re_path写路由,django1.0版本用到的是
例:查询1980年发表的图书。 BookInfo.objects.filter(bpub_date__year=1980) 例:查询1980年1月1日后发表的图书。...QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。...等同于sql中的limit和offset子句。
high_price 50; 聚合查询—基于ORM 聚合函数的使用场景: 单独使用:不分组,只查聚合结果 分组使用: 按字段分组,可查分组字段与聚合结果 导入聚合函数: from django.db.models...取聚合字段别名’)) 规则: 1. values — annotate 分组组合, values控制分组的字段,annotate控制聚合字段 2. values 可以按多个字段分组values(‘字段...# 思路:按出版社分组(从book出发),high_price=max(‘price’), filter(high_price__gt=50) # 每个组的价格最贵的 Book.objects.all...—-(publish and book) # 方式一 : 不使用外键,在book 中添加 publish_id 属性 # 不在支持Django ORM 链表查询语法 # class Book(models.Model...分组聚合查询实例分享的文章就介绍到这了,更多相关Django分组聚合查询内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
各有应用场景 三、基于对象的查询记录(相当于sql语句的where子查询) 一对一查询记录:author和authordetile是一对一的关系 正向查询(按字段author) 反向查询(按表名authordeital...(name="egon").first() print(egon_obj.authordeital.tel) 一对多查询记录: 正向查询(按字段:publish): 反向查询(按表名:book_set...多对多查询记录: 正向查询(按字段authorlist) 反向查询(按表名book_set) # 多对多的查询 # 正向查询:查询追风筝的人的这本书的所有的作者的姓名和年龄 book_obj.../分组查询 聚合查询 aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,Count,Max,Min #...Count('authorlist__name')).filter(num_authors__gt=1).values("title","num_authors")) (5)根据一本图书作者数量的多少对查询集
一 概念 Django的ORM中存在查询集的概念。 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。...当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。...(book.btitle) 2)缓存 使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。 ...三 限制查询集 1)、可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。...为了避免这个,可以用exists()方法,判断查询集中是否有数据,如果有则返回True,没有则返回False。
这个共同的代码演变一个通用的网络开发框架,2005年7月被开源“Django”项目。...Django不断发展壮大——从2008年9月的第一个里程碑版本(1.0)到最近发布的(1.11)-(2017)版本。...例如,如果since_12是表示2012年6月28日日期实例,并且comment_date是2018年3月1日日期实例: views: year_12 = datetime.datetime.now...例如,如果今天是2006年6月1日,而conference_date是保留2006年6月29日的日期实例,则{{ conference_date | timeuntil }}将返回“4周”。 ...) # , , , ]> # 查询2000年4月出生的人
ORM ORM即Object Relational Mapping(对象关系映射) 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping...()所有结果 get(**kwargs)得到一个结果,如果结果多于一个或没有都会报错 如果查询结果是一个结果集,即QuerySet对象,那么它还有以下方法 values(*field): 返回一个ValueQuerySet...2.QuerySet对象 查询的结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片 Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行...result=student.objects.all().aggregate(Avg('num'),Min('num'),new_name=Max('num')) 6.分组查询annotate 分组查询就像是...惯例先引入 from django.db.models import Q Q查询是应用在查询条件上的。
领取专属 10元无门槛券
手把手带您无忧上云