zoukankan      html  css  js  c++  java
  • Python sqlalchemy 高级用法

    一. 关联查询

    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)
  • 相关阅读:
    Java GC机制详解
    程序员面试的时候如何谈薪酬待遇?
    每个程序员都会遇到的面试问题:谈谈进程和线程的区别
    面试问题:你了解Java内存结构么(Java7、8、9内存结构的区别)
    UVa 208
    山科 STUST OJ Problem B: 编写函数:String to Double (II) (Append Code)
    山科SDUST OJ Problem J :连分数
    辗转相除法
    [比赛总结]ACM div3 G 比赛总结
    SDUST OJ Problem G 动态的字符串排序
  • 原文地址:https://www.cnblogs.com/rixian/p/11495757.html
Copyright © 2011-2022 走看看