Query 函数的使用
参数种类
一般可以传递的参数有如下三种:
- 模型名。指定查找这个模型的全部属性(对应于数据库查询中的全表查询)。
- 模型中的属性。可以用来指定只查询某个模型的几个属性值。
- 使用聚合函数。
- func.count():统计行的数量。
- func.avg():求平均值。
- func.max():求最大值。
- func.min():求最小值。
- func.sum():求和。
测试使用
数据表数据
参数为模型名
# 参数为 模型名 -- 全表查询
users = session.query(User).all()
for user in users:
print(user)
结果输出:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
参数为模型属性
# 参数为 模型名中的属性 -- 返回对应的数据
users_name = session.query(User.name).all()
for user_name in users_name:
print(user_name)
结果输出:
('ypb',)
('yxc',)
参数为聚合函数
# 参数为 mysql 聚合函数
# 查询用户的数量
users_sum = session.query(func.count(User.id)).first()
print(users_sum)
'''
输出结果为:(2,)
'''
# 查询所有用户年龄的平均值
users_age_avg = session.query(func.avg(User.age)).first()
print(users_age_avg)
'''
输出结果为:(Decimal('20.0000'),)
'''
# 查询所有用户中最大的年龄
user_max_age_name = session.query(func.max(User.age)).first()
print(user_max_age_name)
'''
输出结果为:(22,)
'''
# 查询所有用户中年龄最大的人的姓名
user_max_age = session.query(func.max(User.age)).scalar()
print(user_max_age)
user_max_age_name = session.query(User.name).filter(User.age == user_max_age).first()
print(user_max_age_name[0])
'''
输出结果为:
22
yxc
'''
# 查询出年龄低于平均年龄的用户名
user_avg_age = session.query(func.max(User.age)).scalar()
user_age_less_than_avg_age_name = session.query(User.name).filter(User.age < user_avg_age).scalar()
print(user_age_less_than_avg_age_name)
'''
输出结果为:ypb
'''
总结
在查询时,主要查询的结果是个集合还是单个数据,这一点非常重要。