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 ...
随机推荐
- zookeeper客户端 zkCli使用及常用命令
上篇(http://www.cnblogs.com/yangzhenlong/p/8270835.html)zk伪集群搭建好后,使用zkCli连接zk服务 切换到zk1/bin 目录,执行zkCli. ...
- firefox 播放h5爱奇艺视频
先安装 violentmonkey 扩展(https://addons.mozilla.org/zh-CN/firefox/addon/violentmonkey/), 在安装这个脚本 https:/ ...
- Java基础_0303:封装性初步
class Book { // 定义一个新的类 private String title; // 书的名字 private double price; // 书的价格 public void getI ...
- python 的基础 学习 第六天 基础数据类型的操作方法 字典
1,字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且ke ...
- 推荐使用string
C-string(char* const char*) basic_string<>特化版本:string charwstring wchar_tu16string char16_tu32 ...
- python - 代码练习 - 备份目录/文件(windos环境)
备份目录/文件 import zipfile import os,datetime class beifen(object): def __init__(self,files,new_files,co ...
- python,中使用while...else 和 for...else 还有try...else,另外就是运用with关键字
其他语言中else只可以和if进行组合,也就是我们常见的if...else,但是python为else赋予了新的声明.它可以和while .for .try一起串联使用. 下面我们介绍和while串联 ...
- [转] 如何轻松愉快地理解条件随机场(CRF)?
原文链接:https://www.jianshu.com/p/55755fc649b1 如何轻松愉快地理解条件随机场(CRF)? 理解条件随机场最好的办法就是用一个现实的例子来说明它.但是目前中文 ...
- SpringCloud Netflix Eureka(服务注册/发现)
⒈Eureka是什么? Eureka是Netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来 ...
- 【VMware vSphere】Veeam备份
前言 刚刚整理自己的Onenote笔记,发现有一篇笔记没有整理到博客上面来.因为没有许可证书,所以最后也没有成功,但是还是写在这里吧,万一哪儿天有了许可证书就又可以做试验了~ Veeam Backup ...