SQLAlchemy查询过滤器
过滤器 | 说明 |
---|---|
filter() | 把过滤器添加到原查询上,返回一个新查询 |
filter_by() | 把等值过滤器添加到原查询上,返回一个新查询 |
limit() | 使用指定的值限制原查询返回的结果数量,返回一个新查询 |
offset() | 偏移原查询返回的结果,返回一个新查询 |
order_by() | 根据指定条件对原查询结果进行排序,返回一个新查询 |
group_by() | 根据指定条件对原查询结果进行分组,返回一个新查询 |
SQLAlchemy查询执行函数
方法 | 说明 |
---|---|
all() | 以列表形式返回查询的所有结果 |
first() | 返回查询的第一个结果,如果没有结果,则返回None |
first_or_484() | 返回查询的第一个结果,如果没有结果,则终止请求,返回404错误响应 |
get() | 返回指定主键对应的行,如果没有对应的行,则返回None |
get_or_484 | 返回指定主键对应的行,如果没有找到指定的主键,则终止请求,返回404错误响应 |
count() | 返回查询结果的数量 |
paginate() | 返回一个Paginate对象,它包含指定范围内的结果 |
from sqlalchemy import func
SQLAlchemy中的统计函数 【sum
,average
,min
,max
】
func.max(Score.score).label(“max_score”),
func.sum(Score.score).label(“total_score”)
SQL语句和SQLAlchemy的用法如下:
1、过滤
SELECT school, COUNT(*) AS c FROM persons WHERE gender="male" GROUP BY age
from sqlalchemy import func
results = sessin.query( Person.school, func.count('*').label('c') ).filter(
Person.gender=='male').group_by( Person.age )
<br />2、分组+筛选
SELECT school, COUNT(*) AS c FROM persons WHERE gender="male" GROUP BY age HAVING c >1
nums = func.count('*').label('c')
results = sessin.query( Person.school, nums).filter(Person.gender=='male')
.group_by(Person.age).having(nums > 10)
3、近7天数据分组统计
SELECT createday, sum(num) FROM persons
WHERE createday Between(select now() - INTERVAL '7 day') and (select now())
GROUP BY createday order by createday;
nums = func.sum(num).label('total')
results = sessin.query( Person.createday, nums).filter(
Person.createday > (datetime.datetime.now() - datetime.timedelta(days=7)))
).group_by(
Person.createday
).all()