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中的统计函数 【sumaverageminmax
func.max(Score.score).label(“max_score”),
func.sum(Score.score).label(“total_score”)

SQL语句和SQLAlchemy的用法如下:
1、过滤

  1. SELECT school, COUNT(*) AS c FROM persons WHERE gender="male" GROUP BY age
  1. from sqlalchemy import func
  2. results = sessin.query( Person.school, func.count('*').label('c') ).filter(
  3. Person.gender=='male').group_by( Person.age )
  1. <br />2、分组+筛选
  1. SELECT school, COUNT(*) AS c FROM persons WHERE gender="male" GROUP BY age HAVING c >1
  1. nums = func.count('*').label('c')
  2. results = sessin.query( Person.school, nums).filter(Person.gender=='male')
  3. .group_by(Person.age).having(nums > 10)

3、近7天数据分组统计

  1. SELECT createday, sum(num) FROM persons
  2. WHERE createday Between(select now() - INTERVAL '7 day') and (select now())
  3. GROUP BY createday order by createday;
  1. nums = func.sum(num).label('total')
  2. results = sessin.query( Person.createday, nums).filter(
  3. Person.createday > (datetime.datetime.now() - datetime.timedelta(days=7)))
  4. ).group_by(
  5. Person.createday
  6. ).all()