orm分组,聚合查询,执行原生sql语句
from django.db.models import Avg
from app01 import models
annotate:(聚合查询)
ret=models.Article.objects.values('up_count').annotate(a=Avg('comment_count')).values('up_count','a')
#原理讲解:之前这个是按照这个up_count来分组的,后面这个是求这个平均的值,后面是打印出什么值出来,
a=Avg('comment_count')这个相当于sql语句的select Avg(comment_count) as a
'''
注明一下,当这个annotate前面是什么,那么这个后面就按照什么来分组,比如这个前面这个分组的字段有很多值的话,那么后面就是求它的平均值,如果是all的话,就是那这个全部的数据进行分组(失去了意义)
''' print(ret) 结果:
<QuerySet [{'up_count': 0, 'a': 0.0}, {'up_count': 1, 'a': 55.0}, {'up_count': 100, 'a': 10.0}]>
extra:(可以在orm数据操作时候额外在extra里面加上sql语句)
'''
讲解:
这个下面的步骤就是相当于后面的up_count>10,是一个筛选的条件,也就是up_count as choice,extra里面
完整的sql语句是:
select up_count>10 as choice ,article.title,article.up_count FROM Article
'''
ret=models.Article.objects.values('title','up_count').extra(
select={'choice':'up_count>11'}
) print(ret)
for i in ret:
print(i) 结果:
<QuerySet [{'title': 'python基础', 'up_count': 1}, {'title': 'go的操作', 'up_count': 100}, {'title': 'go的天然并发', 'up_count': 0}, {'title': 'linux高级指令', 'up_count': 1}]>
{'title': 'python基础', 'up_count': 1}
{'title': 'go的操作', 'up_count': 100}
{'title': 'go的天然并发', 'up_count': 0}
{'title': 'linux高级指令', 'up_count': 1}
例子:
ret=models.Article.objects.all().extra(
select={'choice':'up_count>11'}
)
##这个choice当成一个筛选的条件,当条件为真的时候,就是1,为假就是0 print(ret)
for i in ret:
print(i.up_count,i.title,i.choice) 结果:
<QuerySet [<Article: python基础>, <Article: go的操作>, <Article: go的天然并发>, <Article: linux高级指令>]>
1 python基础 0
100 go的操作 1
0 go的天然并发 0
1 linux高级指令 0
执行原生sql语句:
连接这个sql,执行这个sql的语句:
from django.db import connection
cursor=connection.curson()获取这个光标,等待执行这个sql的语句
curson.execute("这个里面是sql的语句")
row=cursor.fetchone()
这个row就是最终的执行的结果
orm分组,聚合查询,执行原生sql语句的更多相关文章
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- Django之ORM执行原生sql语句
django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句. Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方 ...
- Django之ORM其他骚操作 执行原生SQl
Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=Non ...
- django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境
ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...
- thinkPHP框架中执行原生SQL语句的方法
这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- Django中执行原生SQL语句【新编辑】
参考我的个人博客 这部分迁移到了个人博客中:Django中执行原生SQL语句 这里需要补充一下,还有一个extra方法: ret = models.Student.objects.all().extr ...
- ORM执行原生SQL语句
# 1.connectionfrom django.db import connection, connections cursor = connection.cursor() # cursor = ...
- 执行原生SQL语句的方式
原生sql语句 cursor方法:from api.models import *from django.db import connection,connectionscursor=connecti ...
随机推荐
- vue 组件动态 循环
组件可以是动态的,记录如下 <div v-for="item in arrComponent"> <component v-bind:is="item. ...
- C#正则表达式匹配
1.匹配所有带括号的字符串 string s = "aaaa(bbb)ccc(ddd)eeee"; string pattern = "\\(\\w+\\)"; ...
- request.setCharacterEncoding()、response.setCharacterEncoding()的区别
request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...
- Java8新特性 重复注解与类型注解
import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.anno ...
- 【LeetCode】335. Self Crossing(python)
Problem:You are given an array x of n positive numbers. You start at point (0,0) and moves x[0] metr ...
- MySQL Errno : 1062 错误修复
网站突然出现如下错误: MySQL Error : Duplicate entry '1' for key 'views' MySQL Errno : 1062 Message : Duplicate ...
- (14)CountTriplets
一.问题描述 给定一个数组.三个索引 i,i ~ [0, array.length) j, j ~ [0, array.length) k, k ~ [0, array.length) 求有多少种组 ...
- 3D图像算法
http://dev.gameres.com/Program/Visual/3D/3Darit.htm 3D简介 我们首先从坐标系统开始.你也许知道在2D里我们经常使用Ren?笛卡儿坐标系统在平面上来 ...
- mac 下node,yarn安装及版本切换
node安装 https://nodejs.org/en/download/ 到官网下载指定版本 安装node的管理工具 sudo npm install -g n //安装n sudo n 8.9. ...
- ELK平台搭建(上)
一.目的 为指导在Centos6.8系统下搭建标准ELK平台的工作. 二.定义 Elasticsearch Logstash Kibana结合Redis协同工作. 三.适用范围 适用于运营维护组运维工 ...