flask数据库sqlalchemy查询

 #简单查询
    print(session.query(User).all())
    print(session.query(User.name, User.fullname).all())
    print(session.query(User, User.name).all())

    #带条件查询
    print(session.query(User).filter_by(name='user1').all())
    print(session.query(User).filter(User.name == "user").all())
    print(session.query(User).filter(User.name.like("user%")).all())

    #多条件查询
    print(session.query(User).filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all())
    print(session.query(User).filter(or_(User.name.like("user%"), User.password != None)).all())

    #sql过滤
    print(session.query(User).filter("id>:id").params(id=1).all())

    #关联查询
    print(session.query(User, Address).filter(User.id == Address.user_id).all())
    print(session.query(User).join(User.addresses).all())
    print(session.query(User).outerjoin(User.addresses).all())

    #聚合查询
    print(session.query(User.name, func.count('*').label("user_count")).group_by(User.name).all())
    print(session.query(User.name, func.sum(User.id).label("user_id_sum")).group_by(User.name).all())

    #子查询
    stmt = session.query(Address.user_id, func.count('*').label("address_count")).group_by(Address.user_id).subquery()
    print(session.query(User, stmt.c.address_count).outerjoin((stmt, User.id == stmt.c.user_id)).order_by(User.id).all())

    #exists
    print(session.query(User).filter(exists().where(Address.user_id == User.id)))
    print(session.query(User).filter(User.addresses.any()))
user = session.query(User.name, User.created_at,
             User.updated_at).filter_by(name="letter").order_by(
             User.created_at).first()

多表查询

#多表查询
print( session.query(UserDetails,User).all() )  #这个是 cross join
print( session.query(UserDetails,User).filter(User.id==UserDetails.id).all() )  #这是也是cross join 但是加上了where条件

print( session.query(User.username,UserDetails.lost_login).join(UserDetails,UserDetails.id==User.id).all() )  #这个是inner join

print( session.query(User.username,UserDetails.lost_login).outerjoin(UserDetails,UserDetails.id==User.id).all() )  #这个才是左连接,sqlalchemy没有右连接

q1 = session.query(User.id)
q2 = session.query(UserDetails.id)
print(q1.union(q2).all())  #这个是union关联

还有其他的带条件查询

#不等于
print( session.query(User).filter(User.username!='jingqi').all() )
#模糊匹配 like
print( session.query(User).filter(User.username.like('jingqi')).all() )
print( session.query(User).filter(User.username.notlike('jingqi')).all() )
#成员属于  in_
print( session.query(User).filter(User.username.in_(['jingqi','jingqi1'])).all() )
#成员不属于  notin_
print( session.query(User).filter(User.username.notin_(['jingqi','jingqi2'])).all() )
#空判断
print( session.query(User).filter(User.username==None).all() )
print( session.query(User).filter(User.username.is_(None)).all() )
print( session.query(User).filter(User.username.isnot(None)).all() )
#多条件
print( session.query(User).filter(User.username.isnot(None),User.password=='qwe123').all() )
#选择条件
from sqlalchemy import or_,and_,all_,any_
print( session.query(User).filter(or_(User.username=='jingqi',User.password=='qwe123')).all() )
print( session.query(User).filter(and_(User.username=='jingqi2',User.password=='111')).all() )
#限制查询返回结果
print( session.query(User).filter(User.username!='jingqi').limit(2).all())
print( session.query(User).filter(User.username!='jingqi').offset(2).all())
print( session.query(User).filter(User.username!='jingqi').slice(2,3).all())
 #可以排序之后再进行限制
 from sqlalchemy import desc
 print( session.query(User).filter(User.username!='budong').order_by(User.username).all())
 print( session.query(User).filter(User.username!='budong').order_by(desc(User.username)).slice(1,3).all())
查询制定的id列
result = StuModel.query.with_entities(StuModel.id) # 返回BaseQuery

返回指定的两列
result = StuModel.query.with_entities(StuModel.id, RiskDataModel.name)

并且去重
result = StuModel.query.with_entities(StuModel.store_st_id).distinct().all()

在Flak-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。

会话用db.session表示。在准备把数据写入数据库前,需要先将数据添加到会话中然后调用commit()方法提交会话。

在Flask-SQLAlchemy中,查询操作是通过query对象操作数据。

最基本的查询时返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

聚合查询

func.count:统计行的数量。
* func.avg:求平均值。
* func.max:求最大值。
* func.min:求最小值。
* func.sum:求和。
func上,其实没有任何聚合函数。但是因为他底层做了一些魔术,只要mysql中有的聚合函数,都可以通过func调用。

根据某个字段进行分组。比如想要根据性别进行分组,来统计每个分组分别有多少人,那么可以使用以下代码来完成:

session.query(User.username,func.count(User.id)).group_by(User.username).all()

having是对查找结果进一步过滤。比如只想要看未成年人的数量,那么可以首先对年龄进行分组统计人数,然后再对分组进行having过滤。示例代码如下:

result = session.query(User.age,func.count(User.id)).group_by(User.age).having(User.age >= 18).all()

limit、offset和切片操作:

  1. limit:可以限制每次查询的时候只查询几条数据。
  2. offset:可以限制查找数据的时候过滤掉前面多少条。
  3. 切片:可以对Query对象使用切片操作,来获取想要的数据。可以使用 slice(start,stop)方法来做切片操作。也可以使用 [start:stop]的方式来进行切片操作。一般在实际开发中,中括号的形式是用得比较多的。希望大家一定要掌握。示例代码如下:
users = session.query(User).order_by(User._id.desc())[0:10]

Original: https://blog.csdn.net/chehec2010/article/details/121921037
Author: 月疯
Title: flask数据库sqlalchemy查询

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/746860/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python入门 字典 dict()中的所有方法(详解)

    字典 dict()中的所有方法(详解) 一、clear() clear() 用于清空字典中所有元素(键-值对),对一个字典执行 clear() 方法之后,该字典就会变成一个空字典。…

    Python 2023年8月13日
    070
  • python读取MongoDB数据之数据处理(时间处理+列表嵌套字典转数据框)

    MongoDB数据库存储着非结构化数据,给数据读取之后带来很多需要数据预处理的过程,下面我们来一起总结一下: 1.MongoDB数据库连接,数据表相关数据的读取,包含对相关内容的筛…

    Python 2023年8月8日
    070
  • 【爬虫】selenium实战–爬取知乎评论

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年8月3日
    058
  • 甜点cc的2022年回顾总结

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年9月28日
    041
  • Vue3——vuex的使用——axios网络请求的使用

    vuex作用:用来集中式管理数据 集中式的应用,当前有四个组件A,B,C,D,假如现在有一个数据x在A里面,现在其他三个组件都要用到x并且好要修改x的时候,有一种方法就要用到全局事…

    Python 2023年9月16日
    051
  • 湖南大学python头歌实训-matplotlib

    ; 第1关: 线图的制作 本关任务:寒冷冬天两块不同金属都加热到500度,在空气中放置,温度会不断降低,在接下来的十小时内,现每隔半小时测量一次,测量得到金属块一的温度是500,4…

    Python 2023年8月6日
    046
  • PyQt5滑块控制灰度图的二值化范围

    根据大家的要求,添加一些解释。 首先,PyqT5中自带滑块配件,分为水平方向和竖直方向两种滑块。有时候也叫拖动条,不管怎么说,就是能够滑动的条状部件。滑块的基本属性包括4个,分别是…

    Python 2023年8月26日
    041
  • numpy刷题——03

    自我介绍 我是深圳大学大三的一名大学生,未来想要从事数据分析的工作 从今天开始学习python相关库 第一步是学习numpy!! 若有错误,欢迎指出 资料来源 numpy版本 &#…

    Python 2023年8月27日
    045
  • Python基础之模块

    本质就是一个.py文件,数据、函数、类的定义 当导入模块的时候,模块中语句会执行一次,在使用这个模块前做的初始化工作;以后再多次导入的时候不会执行: c、c++来说:执行的效率较高…

    Python 2023年9月25日
    044
  • 7天限时 | 机器学习资料(书籍+视频)推荐与分享!

    还不快开始学习机器学习?​ 机器学习是一门多领域的交叉学科,涉及概率论、统计学、凸分析、算法复杂性理论等多个学科。它专门研究计算机如何模拟或实现人类的学习行为,以获得新的知识或技能…

    Python 2023年5月24日
    078
  • 万物皆可集成系列:低代码如何不成为数据孤岛

    接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。 翻译一下,就是每个系统都是独立的个体,如…

    Python 2023年10月23日
    051
  • Matplotlib中图表辅助元素

    Matplotlib中图表辅助元素 图表常用的辅助元素 坐标轴 * xlabel()函数 案例 xlim()函数 xticks()函数 案例 案例-2019年中国电影票房排行榜 标…

    Python 2023年9月2日
    085
  • Python数据分析–Numpy常用函数介绍(8)–Numpy中几中常见的图形

    在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。 一、利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波…

    Python 2023年11月2日
    048
  • Linux系统中Java Web应用部署环境的安装与配置(2)–MySQL的安装配置与应用

    在应用程序的开发部署中,数据库的安装与配置必不可少。下面来说明如何实现MySQL数据库在Red Hat Enterprise 6操作系统中基本安装与配置的基本方法。首先做好准备工作…

    Python 2023年6月6日
    051
  • 软考复盘:我的一些复习经验分享

    大家好,我是Edison。最近几天阳了,全身乏力头疼,38.5度高烧,好在症状较轻,经过一天躺平加吃了芬必得后(芬必得真乃神药),退烧了,也不乏力了,也就趁娃娃睡觉时间跟大家分享一…

    Python 2023年10月11日
    068
  • 支持JDK19虚拟线程的web框架,之五(终篇):兴风作浪的ThreadLocal

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《支持JDK19虚拟线程的web框…

    Python 2023年10月15日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球