zoukankan      html  css  js  c++  java
  • sqlalchemy query函数可用参数有哪些?

    一、模型名

    二、模型对象属性

    三、聚合函数

     

    下面就分别为大家讲讲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 "<Student name:%s,score:%s>"%(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函数可用参数讲解。文章若有不当之处,欢迎大家指出!

     

     

  • 相关阅读:
    Flex通信-Java服务端通信实例
    myeclips破解
    最简单的基于FFmpeg的移动端例子:Android 视频转码器
    Kapacitor行为测试
    mydumper备份原理和使用方法
    csdn课堂学习
    maven 遇到failOnMissingWebXml有关问题解决方法
    Oracle中NVL、NVL2、DECODE函数的用法
    Mybatis 一对多 多对1
    Linux编译ffmpeg
  • 原文地址:https://www.cnblogs.com/lmh001/p/9959412.html
Copyright © 2011-2022 走看看