一. 关联查询
sys_user_list = SysPermission.query.join(OrgRolePermission, OrgRolePermission.sys_permission_id == SysPermission.id).filter(OrgRolePermission.role_name == user_cache["role"]).all()
二. 过滤查询
from sqlalchemy import not_
sys_list = SysPermission.query.filter(not_(SysPermission.type == 1))
三. and, or, in查询
from sqlalchemy import and_, or_ sys_user_list = SysPermission.query.filter(and_(SysPermission.type == 2, SysPermission.type == 3)).all() sys_user_list = SysPermission.query.filter(or_(SysPermission.type == 2, SysPermission.type == 3)).all() live_hls_video = LiveHlVideos.query.filter(LiveHlVideos.live_hl_id.in_(live_hls_list)).all() # live_hls_list: [1,2,3]
四. func
from sqlalchemy import func question_types = db.session.query(MoocBankQuestion.question_type, func.sum(MoocBankQuestion.points_possible), func.count(MoocBankQuestion.question_type)).filter( MoocBankQuestion.mooc_bank_id == mooc_bank_id).group_by(MoocBankQuestion.question_type).all()
五.extract
# 查询时间 from app.models.canvas_new import MoocOrders from sqlalchemy import func, and_, extract MoocOrders.query.filter(and_(extract('year', MoocOrders.created_at) == 2020, extract('month', MoocOrders.created_at) == 6)).all() MoocOrders.query.filter(func.to_char(MoocOrders.created_at, "yyyy-mm") == "2020-06").all() start_at = start_at or [] # 示例 "2020-07-11" end_at = end_at or [] # 示例 "2020-07-11" f = table.query if start_at and end_at: start_at = list(map(lambda x: int(x), start_at.split("-"))) end_at = list(map(lambda x: int(x), end_at.split("-"))) start = date(year=start_at[0], month=start_at[1], day=start_at[2]) end = date(year=end_at[0], month=end_at[1], day=end_at[2]) f = f.filter(table.created_at <= end).filter(table.created_at >= start) else: if start_at: start_at = list(map(lambda x: int(x), start_at.split("-"))) start = date(year=start_at[0], month=start_at[1], day=start_at[2]) f = f.filter(table.created_at >= start) if end_at: end_at = list(map(lambda x: int(x), end_at.split("-"))) end = date(year=end_at[0], month=end_at[1], day=end_at[2]) f = f.filter(table.created_at <= end)