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 ...
随机推荐
- showMem.c setMem.c 及其改进
#ifndef MEMUTIL_H_INCLUDED #define MEMUTIL_H_INCLUDED // Show memory void showMem(void *, unsigned); ...
- Sqlserver自动优化
(1)select a.* from tb1 a left join tb2 b on a.id=b.id where a.name='1' (2)select * from (select a. ...
- luogu 2569 股票交易 单调队列dp
注意转移方程 分1.凭空买 2.不买不卖 3.在原来基础上买 4.在原来基础上卖 四种情况 head=1,tail=0;再判断一下head<=tail也可以 #include<bits/s ...
- 【SRM-05 B】无题?
Description 有一个拥有n个城市的国家.这个国家由n-1条边连接起来.有一天国家发生叛乱.叛军已占领了一些城市.如果叛军占领的城市中,存在两个城市之间有边直接相连,则称这种情况是坏的.现在并 ...
- 剑指Offer-从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 使用两个队列一个存放节点,一个存放值.先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子 ...
- redis架构~哨兵模式
一 哨兵模式稳定版本 redis哨兵模式是redis自带的高可用框架,稳定版本为redis2.8以上二 哨兵模式建立 1 避免单点故障,建立启动多个哨兵进程 2 哨兵模式启动命令 redis-s ...
- Tip:JSP标签也称之为Jsp Action(JSP动作)元素
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. ================ &l ...
- Django学习手册 - csrf
CSRF csrf原理 无csrf时存在隐患 Form提交 Ajax提交 默认为全局都csrf Form表单提交方式: <div> <form action="/login ...
- 如何预览Github上的页面
参考链接:https://www.jianshu.com/p/46ddd926f005
- CF1108F MST Unification
题目地址:CF1108F MST Unification 最小生成树kruskal算法的应用 只需要在算法上改一点点 当扫描到权值为 \(val\) 的边时,我们将所有权值为 \(val\) 的边分为 ...