博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlalchemy query函数可用参数有哪些?
阅读量:5329 次
发布时间:2019-06-14

本文共 2698 字,大约阅读时间需要 8 分钟。

一、模型名

二、模型对象属性

三、聚合函数

 

下面就分别为大家讲讲query函数这三种参数的用法。

在讲之前,我已经把数据库连接配置、模型,以及添加数据写好了,代码如下:

1 from sqlalchemy import create_engine,Column,String,Integer 2 from sqlalchemy.ext.declarative import declarative_base 3 from sqlalchemy.orm.session import sessionmaker 4 import random 5   6 DIALCT = "mysql" 7 DRIVER = "pymysql" 8 USERNAME = "root" 9 PASSWORD = "admin"10 HOST = "127.0.0.1"11 PORT = "3306"12 DATABASE = "test"13 DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)14 engine = create_engine(DB_URI)15 Base = declarative_base(engine)16 session = sessionmaker(engine)()17  18 class Student(Base):19     __tablename__ = "student"20     id = Column(Integer , primary_key=True , autoincrement=True)21     name = Column(String(50))22     score = Column(Integer)23  24     def __repr__(self):25         return "
"%(self.name,self.score)26 27 Base.metadata.drop_all()28 Base.metadata.create_all()29 30 for i in range(6):31 # random.randint(0,100) 随机生成一个0-100之间的成绩32 student = Student(name = "name%s"%i,score=random.randint(0,100))33 session.add(student)34 session.commit()

 

第一种:模型名

语法:query(模型名)

假如我们现在要查找表中所有学生数据,方法如下:

1 results = session.query(Student).all()2 for result in results:3     print(result)

运行上述代码,然后就可以看到查找结果了。

 

第二种:模型对象属性

语法:query(模型名.模型属性)

比如我们现在只想查看表中所有学生的姓名(看到成绩头有点大),代码如下:

1 results = session.query(Student.name).all()2 for result in results:3     print(result)

运行上述代码,我们就可以看到所有学生姓名了,结果如下:

 

第三种:聚合函数

上述表中我已列出所有所有的聚合函数,下马我就一一为大家讲讲。注意:在使用聚合函数前,记得从sqlalchemy导入

1 from sqlalchemy import create_engine,Column,String,Integer,func

1、func.sum

语法:query(func.sum(模型对象属性))

比如想要知道所有学生成绩之和,那么我们就可以使用func.sum这个聚合函数来实现

1 results = session.query(func.sum(Student.score)).all()2 print(results)

运行代码,结果学生成绩之和就计算好了。

 

2、func.max

语法:query(func.max(模型对象属性))

如果要查找考试成绩最高的哪个学生,就可以使用func.max这个函数

1 results = session.query(func.max(Student.score)).all()2 print(results)

嗯,查询出来的学生成绩最高分是98分

3、func.min

语法:query(func.min(模型对象属性))

我们知道最高分,然后想知道班上学生成绩波动大小。哪怎么办呢??想知道成绩波动大小,我们是不是还得知道班上成绩最低分,是吧?然后用最大值减去最小值除以二就可以求出学生成绩波动大小了。哪如何找出最小值呢?方法就是使用func.min这个聚合函数。

1 results = session.query(func.min(Student.score)).all()2 print(results)

运行上述代码,我们就可以查找到分数最低的哪个。

4、func.count

语法:query(func.count(模型对象属性))

1 results = session.query(func.count(Student.score)).all()2 print(results)

不出什么意外的话,我们就能得到下面结果(没错吧,总共是6行):

5、func.avg

语法:query(func.avg(模型对象属性))

期末考试考完,学校通常是不是要跟年级进行对比?对比啥?当然是班级考试成绩排名、好坏啦!那么如何对比呢?是不是通过考试成绩平均分,是吧?我说的没错吧?OK,func.avg这个聚合函数就是为解决求平均值而生的。

1 results = session.query(func.avg(Student.score)).all()2 print(results)

运行上述代码,结果如下:

平均分是58.3333,考的有点不太理想啊。

上面就是关于query函数可用参数讲解。文章若有不当之处,欢迎大家指出!

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/lmh001/p/9959412.html

你可能感兴趣的文章
[PHP] excel 的导入导出
查看>>
docker-containerd 启动流程分析
查看>>
SDL(01-10)
查看>>
网络爬虫基本原理(一)
查看>>
HDU 1021 Fibonacci Again
查看>>
【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
查看>>
Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
查看>>
(翻译)从底层了解ASP.NET体系结构 [转]
查看>>
IM开发通信协议基础知识(一)---TCP、UDP、HTTP、SOCKET
查看>>
UVa 10129 - Play on Words (欧拉回路, DFS)
查看>>
Android Studio 创建/打开项目时一直处于Building“project name”Gradle project info 的解决...
查看>>
Android ViewPager使用详解
查看>>
【转】C# 过滤HTML,脚本,数据库关键字,特殊字符
查看>>
iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)
查看>>
Android连接数据库的问题
查看>>
A Story of One Country (Hard) CodeForces - 1181E2 (分治)
查看>>
Android使用本地广播
查看>>
python 删除大表数据
查看>>
【CC评网】2013.第44周 把握每天的第一个小时
查看>>
高效的使用STL
查看>>