django-orm聚合查询和原生数据库查询
时间:2021-08-12
本文章向大家介绍django-orm聚合查询和原生数据库查询,主要包括django-orm聚合查询和原生数据库查询使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
聚合查询 group by
整表聚合
In [1]: from django.db.models import *
In [2]: from bookstore.models import Book
In [3]: b1=Book.objects.aggregate(res=Count('price'))
In [4]: b1
Out[4]: {'res': 4}
In [5]: type(b1)
Out[5]: dict
分组聚合 先分组再聚合
In [17]: bs=Book.objects.values('pub','price')
In [19]: bs.annotate(res=Count('id'))
Out[19]: <QuerySet [{'pub': '清华大学出版社', 'price': Decimal('1.00'), 'res': 2}, {'pub': '机械工业出版社', 'price': Decimal('90.00'), 'res': 1}, {'pub': '机械工业出版社', 'price': Decimal('80.00'), 'res': 1}]>
In [20]: bs.annotate(res=Count('id')).filter(price__gt=50)
#groupby 和having 操作
Out[20]: <QuerySet [{'pub': '机械工业出版社', 'price': Decimal('90.00'), 'res': 1}, {'pub': '机械工业出版社', 'price': Decimal('80.00'), 'res': 1}]>
In [21]: a=bs.annotate(res=Count('id')).filter(price__gt=50)
In [22]: print(a.query)
SELECT `Book`.`pub`, `Book`.`price`, COUNT(`Book`.`id`) AS `res` FROM `Book` WHERE `Book`.`price` > 50 GROUP BY `Book`.`pub`, `Book`.`price` ORDER BY NULL
原生数据库查询
Mymodel.objects.raw()
#sql注入的情形-字符串拼接
In [34]: s1=Book.objects.raw('select * from book where id=%s'%('1 or 1=1'))
In [35]: for i in s1:
...: print(i.title)
...:
Django
JQury
Linux
HTML5
#防止sql注入的情形
In [36]: s2=Book.objects.raw('select * from book where id=%s',['1 or 1=1'])
In [37]: for k in s2:
...: print(k.title)
...:
In [38]: s3=Book.objects.raw('select * from book where id=%s',['3 or 1=1'])
In [39]: for k in s3:
...: print(k.title)
cursor
In [71]: from bookstore.models import Book
In [72]: with connection.cursor() as cur:
...: cur.execute('select * from book where pub=%s',['清华大学出版社'])
...: content=cur.fetchall()
...:
In [73]: content
Out[73]:
((2, 'Django', Decimal('1.00'), Decimal('85.00'), '清华大学出版社', 0),
(5, 'HTML5', Decimal('1.00'), Decimal('115.00'), '清华大学出版社', 1))
原文地址:https://www.cnblogs.com/yescarf/p/15134410.html
- Linux | CentOS7下会玩JDK不?你确定?
- Linux | 不懂Linux的码神,不是真正的菜鸟
- 初体验Spring Boot 2支持的HikariCP连接池
- 快来了解JDK10中引入的全新JIT编译器:Graal
- 基于Ryu打造自定义控制器
- Junit 5新特性全集
- 深入了解浏览器的重绘与重排
- 自己动手写区块链(Java版)
- 自己动手写区块链-发起一笔交易(Java版)
- 详解JavaScript跨域问题
- OpenStack Magnum及Liberty新功能简介
- JDK10要来了:下一代 Java 有哪些新特性?
- 是时候忘掉finalize方法了
- 学会一个JVM插件:使用HSDIS反汇编JIT生成的代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kears 使用:通过回调函数保存最佳准确率下的模型操作
- django form和field具体方法和属性说明
- 总结PHP中初始化空数组的最佳方法
- tensorflow使用CNN分析mnist手写体数字数据集
- PHP7 mongoDB扩展使用的方法分享
- 主流开源分布式图数据库 Benchmark
- PHP封装的简单连接MongoDB类示例
- 基于Tensorflow的MNIST手写数字识别分类
- Yii框架ACF(accessController)简单权限控制操作示例
- tensorflow 动态获取 BatchSzie 的大小实例
- TP5.0框架实现无限极回复功能的方法分析
- Tensorflow之MNIST CNN实现并保存、加载模型
- tensorflow 大于某个值为1,小于为0的实例
- YII框架模块化处理操作示例
- 基于tensorflow for循环 while循环案例