博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM了解知识
阅读量:6812 次
发布时间:2019-06-26

本文共 1210 字,大约阅读时间需要 4 分钟。

1.不分组情况下聚合查询  aggregate

aggregate(Sum('price'),Max('price'))

属于QuerySet的方法,返回值是字典

2.在分组情况下聚合查询  annotate

分组:values('tag1','tag2').annotate(Sum('price'),max_price=Max('price'))

分组后取字段:在分组后在使用values('分组字段及聚合字段')

分组后筛选:在分组后使用filter('只对聚合结果进行过滤')

3/常用字段与字段的常用属性

choices=((1,'男'),(0,'女'))

4.关系字段

ForeignKey  |  OneToOneField

models.ForeignKey(to='Book',null=True,on_delete=models.SET_NULL,db_constraint=False)

ManyToManyField

元信息

Model类可以通过元信息类设置索引和排序信息

元信息是在Model类中定义一个Meta子类

class Meta:

  自定义表名

  db_table='table_name'

  联合索引

  index_together = ('tag1','tag2')

  联合唯一索引

  unique_together = ('tag3','tag4')

  排序字段

  ordering = 'ordering_tag'

  #/admin/中显示的表名称

  verbose_name = 'table_name'

2.基于对象查询的sql优化

好处:信息存放到对象中,取值方便

坏处:所有字段都进行查询

uq = User.objects.all()

print(uq)

print(uq.query)

only:只取规定的字段形成对象(查主键)

uql = User.objects.all().only('name','age')

print(uql)

print(uql.first().gender))当查询不存在的字段时将重新查询

defer:只取规定的字段外的字段形成对象(查主键)

us = User.objects.all().defer('name','age')

好处:只对所需字段进行查询

坏处:数据放在字典中,相比对象取值不是那么方便

usd = User.objects.values('name','age')

print(usd.query)

在路径中取别名:name = 'show_book' 反解:reverse(name)

前端也可以通过得到的对象进行连表查询

前端进行for循环时,可以使用for_loop确定循环的次数  

转载于:https://www.cnblogs.com/suncunxu/p/10496168.html

你可能感兴趣的文章
C语言 文件操作5--文件的常用函数
查看>>
遇到的几个难题
查看>>
eclipse插件spket安装
查看>>
Gallery过时替代方案HorizontalScrollView
查看>>
SSRF安全威胁在JAVA代码中的应用
查看>>
【转】Spark性能优化指南——基础篇
查看>>
Android Studio 运行、编译卡死的解决办法
查看>>
Json转Java Bean
查看>>
C# 合并及拆分Word文档
查看>>
Liferay中actionURL能够执行后台方法 ,但是页面不跳转问题解决方案
查看>>
libyuv 编译for ios
查看>>
加密安装Kali Linux条件
查看>>
关于Cocos2d-x中UI按钮的定义
查看>>
IPTables系列:如何配置Ubuntu 14.04中的IPTables防火墙
查看>>
swift:自定义UICollectionViewFlowLayout
查看>>
转】MYSQL性能调优与架构设计之select count(*)的思考
查看>>
MFC Initinstance中DoModal()返回-1
查看>>
抢红包的红包生成算法
查看>>
1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
查看>>
升级到 PHP-7 遇到的坑 及 经验分享
查看>>