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 funcresults = 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 personsWHERE 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()
