Python-Mysql-sqlalchemy中的聚合函数
1 引入
参考 :SQL聚合函数
SQL聚合函数,包括:AVG(),COUNT(),MIN(),MAX()和SUM()。
SQL聚合函数计算一组值并返回单个值。 例如,平均函数(AVG)采用值列表并返回平均值。
2 实验
2.1 构建数据表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerHOST = '127.0.0.1' PORT = 3306 USERNAME = 'xxx' PASSWORD = 'xxx' DB = 'xxx' DB_URI = f'mysql+pymysql://{USERNAME} :{PASSWORD} @{HOST} :{PORT} /{DB} ' engine = create_engine(DB_URI) Base = declarative_base(engine) session = sessionmaker(engine)() class Person (Base) : __tablename__ = 'person' id = Column(Integer, primary_key=True , autoincrement=True ) name = Column(String(100 )) age = Column(Integer) Base.metadata.create_all() def insert_batch (obj_list) : session.add_all(obj_list) session.commit() def del_table () : Person.__table__.drop() if __name__ == "__main__" : obj_list = [Person(name="dragon" , age=22 ), Person(name="pig" , age=23 ), Person(name="SY" , age=19 ), Person(name="cat" , age=7 ), Person(name="toy" , age=8 ), Person(name="sen" , age=23 ), Person(name="tor" , age=10 ), ] insert_batch(obj_list)
数据表如下图所示:
下面的聚合函数,需要导入func:
1 from sqlalchemy import func
2.2 AVG() - 返回集合中的平均值
参考 :SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
1 age_avg = session.query(func.avg(Person.age)).scalar()
注意 :这里的age虽然是int类型的,但是最后的平均值是“准确”的小数。
2.3 COUNT() - 返回集合中的项目数
参考 :SQLAlchemy —— query
返回查询结果的对象的数目,下面的例子是找到了toy和tor两个对象:
1 u = session.query(Person).filter(Person.name.like('to%' )).count()
需要单独计算某一类对象的数量,可以用 func() 和 group_by() 配合查询:
1 2 u = session.query(Person.name, func.count(Person.name)).group_by(Person.name).all() print(u)
返回查询得到的的数值,我们使用 scalar() 方法:
1 u = session.query(func.count(Person.age)).scalar()
2.4 MIN() - 返回集合的最小值
参考 :SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
1 age_min = session.query(func.min(Person.age)).scalar()
2.5 MAX() - 返回集合的最大值
参考 :SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
1 age_max = session.query(func.max(Person.age)).scalar()
2.6 SUM() - 返回所有值的总和
参考 :sqlalchemy对数据进行求和
1 2 age_sum = session.query(func.sum(Person.age)).scalar() age_sum = session.query(func.sum(Person.age)).filter(Person.name.like("to%" )).scalar()
X 参考
Life is painting a picture, not doing a sum.