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)
  • 相关阅读:
    第二十四讲 ASP.NET中开发复合控件
    第二十六讲 使用ASP.NET实现网络通讯
    第二十五讲 ASP.NET中的XML
    【经验】android webview 后退键导致表单再次提交
    【笔记】java 泛型
    【笔记】Collection
    【算法】Tween算法
    【JavaSript】发现一个漏洞
    【研究】加载图片时,同一url,多次request
    【笔记】多态之Override
  • 原文地址:https://www.cnblogs.com/rixian/p/11495757.html
Copyright © 2011-2022 走看看