首页 > 数据库 >flask之 sqlalchemy 高级查询

flask之 sqlalchemy 高级查询

时间:2025-01-16 15:43:35浏览次数:1  
标签:sqlalchemy Users flask ret 查询 session query id name

1、filter_by写条件 

session.query(Users).filter_by(name='lqz').all()

2、between 、in_

session.query(Users).filter(Users.id.between(1, 10)).all()

ret = session.query(Users).filter(Users.id.in_([1, 4, 5])).all()

3、~非,除...外

session.query(Users).filter(~Users.id.in_([1, 3, 5])).all()

4、二次筛选

session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(name='lqz'))).all()

5、and_、or_ 条件

from sqlalchemy import and_, or_

# ret = session.query(Users).filter(and_(Users.id > 3, Users.name == 'zhangsan')).all()
ret = session.query(Users).filter(Users.id > 3, Users.name == 'lqz').all()  # 根上面一样

# select * from users where id<=2 or name =lqz;
ret = session.query(Users).filter(or_(Users.id <= 2, Users.name == 'zhangsan')).all()

# select * from users where id <2 or (name=lqz and id>3) or extra !='';
ret = session.query(Users).filter(
    or_(
        Users.id < 2,
        and_(Users.name == 'zhangsan', Users.id > 3),
        Users.extra != ""
    )).all() 

6、like

# # 通配符,以e开头,不以e开头
# select * from users where name like l%;
ret = session.query(Users).filter(Users.name.like('z%')).all()
ret = session.query(Users).filter(~Users.name.like('l%')).all()

7、限制、分页

ret = session.query(Users)[1:2] 

8、升序、降序

# ret = session.query(Users).order_by(Users.id.desc()).all()  # 降序
# ret = session.query(Users).order_by(Users.id.asc()).all()  # 升序
ret = session.query(Users).order_by(Users.id).all()  # order_by 默认就是升序排序

# 第一个条件重复后,再按第二个条件升序排
ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()

9、分组

from sqlalchemy.sql import func
# select name from users group by name;  一旦分组,只能查询 分组字段和聚合函数的字段
ret = session.query(Users.name).group_by(Users.name).all()

# #分组之后取最大id,id之和,最小id 和名字
ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id), func.count(Users.id), Users.name).group_by(Users.name).all()

10、haviing筛选

# select max(id),sum(id),min(id),count(id),name from users group by name where id >5 having min(id)>2;
ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id),
    func.count(Users.id),
    Users.name).filter(Users.id > 2).group_by(Users.name).having(func.min(Users.id) > 5).all()

11、连表(默认用forinkey关联)

# select * from person,hobby where user.hobby_id=hobby.id;
ret = session.query(Person, Hobby).filter(Person.hobby_id == Hobby.id).all() 

12、join表,默认是inner join

# select * from person inner join hobby on person.hobby_id=hobby.id;
ret = session.query(Person).join(Hobby).all()

# # isouter=True 外连,表示Person left join Hobby,没有右连接,反过来即可
# select * from person left join hobby on person.hobby_id=hobby.id;
ret = session.query(Person).join(Hobby, isouter=True).all()
ret = session.query(Hobby).join(Person, isouter=True).all()  # 右链接

13、union和union all

union 会去重

q1 = session.query(Boy.name).filter(Boy.id > 1)
q2 = session.query(Girl.name).filter(Girl.id < 10)
ret = q1.union(q2).all()

q1 = session.query(Boy.name).filter(Boy.id > 1)
q2 = session.query(Girl.name).filter(Girl.id < 10)
ret = q1.union_all(q2).all()

  

 

标签:sqlalchemy,Users,flask,ret,查询,session,query,id,name
From: https://www.cnblogs.com/dgp-zjz/p/18675126

相关文章

  • elasticsearch之DSL查询结果处理
    搜索的结果可以按照用户指定的方式去处理或展示。排序分页搜索关键词高亮排序elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。普通字段排序keyword、数值、日......
  • GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和
    云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。由于云原生数据库是shareddisk架构,一个事务在一个节点上执行,所以不需要原来分布式根据分布式key进行数据分布,分布式执行和分布式2PC提交的能力。为了支持数据库粒度的异地多活,云原生......
  • MySQL核心揭秘:从查询到修改,彻底理解 Undo Log、Redo Log、Binlog 与 ACID 的关系【转
    1前言在当今数据驱动的时代,数据库系统作为信息存储和管理的核心组件,其性能和可靠性直接影响着应用的稳定性和用户体验。MySQL,作为最流行的开源关系型数据库管理系统之一,被广泛应用于各类互联网应用中。然而,许多开发者和数据库管理员对其内部机制知之甚少,特别是在事务处理和日......
  • elasticsearch的DSL查询文档
    1、DSL查询文档Elasticsearch提供了基于JSON的DSL(DomainSpecificLanguage)来定义查询。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match_query:单字段查询mult......
  • GaussDB-SQL查询最佳实践
    GaussDB-SQL查询最佳实践根据数据库的SQL执行机制以及大量的实践总结发现:通过一定的规则调整SQL语句,在保证结果正确的基础上,能够提高SQL执行效率。使用unionall代替union。union在合并两个集合时会执行去重操作,而unionall则直接将两个结果集合并、不执行去重。执行去重会......
  • Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢
    一、查询优化1、查询优化器(QueryOptimizer)MySQL查询优化器(QueryOptimizer)是MySQL数据库管理系统中的一个关键组件,负责分析和选择最有效的执行计划来执行SQL查询。查询优化器的目标是尽可能减少查询的执行时间和资源消耗,从而提高查询性能。查询语句不同关键字(where、......
  • Flask中的jinji2---过滤器
    在Jinja2中,过滤器是用于对模板变量进行操作的工具,类似于管道。以下是Jinja2中常用的过滤器及其功能:1.字符串处理capitalize将字符串的首字母大写,其余部分小写。{{"helloworld"|capitalize}}<!--输出:Helloworld-->lower将字符串转为小写。{{"HELLO"|lo......
  • flask之 scoped实现线程安全.py
    1、用法导入模块,将Session传入scoped_session即可fromsqlalchemy.ormimportsessionmakerfromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportscoped_sessionfrommodelsimportUsersfromthreadingimportlocalengine=create_engine("mysql+pymysql:......
  • flask之sqlalchemy ORM 一对多、多对多
    一、一对多关系爱好和人的关系,一个爱好可以对应多个人1、models#1导入一些模块importdatetimefromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportdeclarative_base,\relationship#新的变成它,老的会有fromsqlalchemy.ext.declarativeimport......
  • 深度剖析 GROUP BY 和 HAVING 子句:优化 SQL 查询的利器
    title:深度剖析GROUPBY和HAVING子句:优化SQL查询的利器date:2025/1/14updated:2025/1/14author:cmdragonexcerpt:在数据处理和分析的过程中,需要对收集到的信息进行整理和汇总,从而为决策提供依据。在SQL语言中,GROUPBY和HAVING子句是用于分组和过滤数......