Django学习记录12

聚合查询

指对一个数据表里的所有元素进行部分(整表聚合)或者全部(分组聚合)统计查询
eg:统计平均值、最大、最小值等
整表查询:
1、导入

from django.db.models import *

2、聚合函数

Sum
Avg
Count
Max
Min

3、使用

Mymodel.objects.aggregate(结果变量名=聚合函数('列名'))

4、返回值
结果变量名和值组成的字典

mysql中的语句:
统计所有个数,
select count(*) as 结果变量名 from 表名
最终输出了一个表。斜体样式
分组聚合:
1、使用
QuerySet.annotatre(结果变量名=聚合函数(‘列名’))
2、返回值
返回一个QuerySet对象。

在使用时,要先使用mymodels.objects.values()查询要分组聚合的列。
返回的QuerySet可以继续进行过滤或者聚合操作。

原生数据库操作

一、

Django也支持直接使用数据库原生的语句操作,返回RawQuerySet对象,无法继续使用筛选等操作,只可进行循环等基础操作,且与数据库耦合,不建议使用。
语法:

data=mymodels.objects.raw('SQL语句')

注意!!!
使用SQL语句时严防sql注入,一般根据用户传递的信息拼接SQL语句,若用户输入了SQL语句,与你的原生语句拼接成了新的SQL语句,可能会导致数据库信息泄露,遭到攻击。
eg:

data=mymodels.objects.raw('select * from tables1 where id=%s'%userdata)

原本想根据id查询table1里的信息,若用户输入‘1 or 1=1’,则用户可获得该表单所有数据
eg:若在登录时使用

user=mymodels.objects.raw(f'select * from tables1 where name={name} and password={password}')

若用户在name输入lenglu#,则会将密码匹配注释掉,直接登录lenglu的账号。
故更加推荐django内置的ORM。

也可将需要拼接的参数放在row函数的第二个参数里,安全传入。

data=mymodels.objects.raw('select * from tables1 where id=%s',userdata)

二、

row方法虽然也可以使用sql语句,但仍然要经过模型类。

cursor使用完全独立的操作,完全跨过模型类。
1、导入

from django.db import connection

2、使用
用创建cursor类的构造函数创建cursor对象,再使用cursor对象,为保证出现异常时释放cursor资源,通常使用with语句进行创建。

with connection.cursor() as cur:
	cur.excute('SQL语句','拼接参数')
cur.excute('SQL语句','拼接参数')可以返回成功执行语句的数据条数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Django时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程中,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值