Python零基础从小白打怪升级中~~~~~~~FastAPI和SQLAlchemy的整合

第六节:FastAPI和SQLALchemy的整合

一、ORM的查询操作

   	# 查找某个模型对应的那个表中所有的数据:all_person = session.query(Person).all()# 使用filter_by来做条件查询all_person = session.query(Person).filter_by(name='momo1').all()# 使用filter来做条件查询all_person = session.query(Person).filter(Person.name=='momo1').all()# 使用get方法查找数据,get方法是根据id来查找的,只会返回一条数据或者Noneperson = session.query(Person).get(primary_key)# 使用first方法获取结果集中的第一条数据person = session.query(Person).first()# 新版本
select_stmt = select(Employee).where(Employee.id > 1, Employee.sal == None)
result = session.execute(select_stmt)
for row in result.scalars():  # result里面是一行一行的数据print(row)print(row.dept.name)
result.first()

1、filter的过滤

过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的:

  1. equals : ==
   news= session.query(News).filter(News.title == "title1").first()result = session.execute(select(Employee).where(Employee.id > 1).order_by(Employee.id))
  1. not equals : !=
    query(User).filter(User.name != 'ed')result = session.execute(select(Employee).where(Employee.id != 1))
  1. like & ilike [不区分大小写]:
    query(User).filter(User.name.like('%ed%'))result = session.execute(select(Employee).where(Employee.name.like('%四%')))
  1. in:
   query(User).filter(User.name.in_(['ed','wendy','jack']))result = session.execute(select(Employee).where(Employee.name.in_(['李四', '王五'])))
  1. not in:
     query(User).filter(~User.name.in_(['ed','wendy','jack']))result = session.execute(select(Employee).where(Employee.name.notin_(['李四', '王五'])))
  1. is null:
    query(User).filter(User.name==None)# 或者是query(User).filter(User.name.is_(None))# 新版本result = session.execute(select(Employee).filter(Employee.dept_id.is_(None)))
  1. is not null:
    query(User).filter(User.name != None)# 或者是query(User).filter(User.name.isnot(None))result = session.execute(select(Employee).filter(Employee.dept_id.isnot(None)))
  1. and:
   query(User).filter(and_(User.name=='ed',User.fullname=='Ed Jones'))# 或者是传递多个参数query(User).filter(User.name=='ed',User.fullname=='Ed Jones')# 或者是通过多次filter操作query(User).filter(User.name=='ed').filter(User.fullname=='Ed Jones')result = session.execute(select(Employee).where(Employee.id > 2).where(Employee.dept_id.isnot(None)))
  1. or:
   query(User).filter(or_(User.name=='ed',User.name=='wendy'))result = session.execute(select(Employee).where(or_(Employee.id > 2, Employee.dept_id.isnot(None))))

2、聚合函数

  • func.count:统计行的数量。
  • func.avg:求平均值。
  • func.max:求最大值。
  • func.min:求最小值。
  • func.sum:求和。
r = session.query(func.count(News.id)).first()
print(r)r = session.query(func.max(News.price)).first()
print(r)r = session.query(func.min(News.price)).first()
print(r)result = session.execute(select(func.count(Employee.id))).first()

3、分组查询

group_by:

根据某个字段进行分组。如想要根据年龄进行分组,来统计每个分组分别有多少人

r = session.query(User.age,func.count(User.id)).group_by(User.age).all()result = session.execute(select(Dept.name, func.count(Employee.dept_id)).join(Dept.emp_list).group_by(Dept.name))
# print(result.all())
# for item, co in result.all():
#     print(item, co)for item in result:print(item.name, item.count)

having:

having是对分组查找结果作进一步过滤。如只想要看未成年人的人数,

那么可以首先对年龄进行分组统计人数,然后再对分组进行having过滤。

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

二、整合

通过注入,把session对象注入到视图函数中去

@app.get("/test", response_class=HTMLResponse)
def test(request: Request, name: Union[str, None], session: Session = Depends(get_session)):all_list = session.query(Employee).all()return templates.TemplateResponse("result.html", {"request": request, 'emp_list': all_list})
def get_session():session = Session(bind=engine)try:yield sessionfinally:session.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go 快速入门】泛型 | 类型约束 | 泛型接口 | 通用数据结构

文章目录 泛型类型参数类型实例化类型约束类型集并集 & 交集 泛型接收者泛型方法泛型接口两种接口类型泛型接口 泛型实现通用数据结构数组链表数组队列 本节项目地址&#xff1a;06-GenericsQueue 泛型 如果你经常要分别为不同的类型写完全相同逻辑的代码&#xff0c;那么…

输了,腾讯golang一面凉了

本月正值4月,是金三银四的找工作的最佳时机。同时竞争也是很大,因为每年这个时候快要毕业的大学生也进去了找工作的潮水中。 今天分享我的一位大佬朋友CC,勇闯腾讯golang的面试经历。 这次面试问题的方向主要集中在计算机基础个网络方面。 下面是主要问到的问题。 第一个…

Word文档如何更改页面背景颜色?

在Microsoft Word中&#xff0c;设置页面颜色的方法有多种&#xff0c;以下为其中几种常用的方法&#xff1a;&#xff08;为office2016版本操作&#xff09; 方法一&#xff1a;使用主题颜色 1. 打开Word文档&#xff0c;在菜单栏中选择“设计”。 2. 在“设计”选项卡中&a…

泰山众筹:低门槛高回报的电商营销新模式

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发的公司&#xff0c;担任产品经理一职。今天&#xff0c;我想与大家分享一种备受瞩目的商业模式——泰山众筹。 泰山众筹之所以能够在市场上迅速走红&#xff0c;其背后的原因值得我们深入探讨&#xff1a; 首先&…

【神经网络与深度学习】文本情感分类

数据准备 AclImdb – v1 Dataset 是用于二进制情绪分类的大型电影评论数据集&#xff0c;其涵盖比基准数据集更多的数据&#xff0c;其中有 25,000 条电影评论用于训练&#xff0c;25,000 条用于测试&#xff0c;还有其他未经标记的数据可供使用。 数据预处理和数据装载 imp…

idm线程越多越好吗 idm线程数多少合适

IDM&#xff08;Internet Download Manager&#xff09;是一款流行的下载管理软件&#xff0c;它支持多线程下载&#xff0c;这意味着它可以同时建立多个连接来下载文件的不同部分&#xff0c;从而提高下载速度。我们在使用IDM的时候总是有很多疑问&#xff0c;今天我们学习IDM…

游戏开发者必看:Perforce Helix Core 的功能特点及游戏开发中的常用工具、典型用例介绍

「不出海&#xff0c;即出局」随着全球化的加速发展&#xff0c;企业出海已成燎原之势。日前&#xff0c;2024 亚马逊云科技出海全球化论坛在深圳成功举办。龙智携手 Perforce 亮相游戏行业展区&#xff0c;展示了Perforce Helix Core如何与主流游戏开发引擎高效集成&#xff0…

Pytest精通指南(12)Parametrize源码拆解

文章目录 前言Parametrize 参数化Parametrize 源码分析Parametrize 使用说明一个参数的参数化多个参数的参数化验证类中有多个测试函数验证变量或函数传递参数化验证笛卡尔积拓展用法 前言 在 pytest 中&#xff0c;有两种常见的参数化方法&#xff1a; pytest.mark.parametriz…

哈希密码破解方法汇总

案例: 如何破译 254aa248acb47dd654ca3ea53f48c2c26 e93a1ec56258df7674c4 258df7674c4 该hash加密串的原文信息 步骤: 1)通过Hash Analyzer - TunnelsUP站点了解该hash加密串所使用的哈希加密算法类型。 可知,使用了 sha2-256 加密算法。 2) 访问example_hashes [hash…

C语言-Linux:简单实现Linux的cp指令

在Linux操作系统中&#xff0c;cp 命令是一种常用的文件和目录复制工具。以下是对cp命令的详细说明&#xff0c;包括其基本语法、常用选项以及一些示例用法&#xff1a; 基本语法&#xff1a; cp [选项] 源 目标 其中&#xff1a; 源&#xff1a;指要复制的文件或目录。目标&am…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 一、简单介绍 二、简单给视频添加水印图片效果实现…

【Linux学习】初识Linux指令(二)

文章标题 1.rm 指令2.man指令3.nano指令4.cp指令5.mv指令6.alias指令7. cat与8.echo指令 ⚶文章简介 ⚶本篇文章继上篇文章Linux指令讲解&#xff0c;本篇文章主要会涉及到的指令会有&#xff1a;rm指令与 *&#xff08;通配符&#xff09;的搭配使用&#xff0c;man指令&…

[重学Python]Day3 函数和模块的使用

[重学Python]Day3 函数和模块的使用 一、函数的作用二、定义函数三、函数的参数四、用模块管理函数五、练习&#xff08;一&#xff09;实现计算最大公约数和最小公倍数的函数&#xff08;二&#xff09;、实现判断一个数是不是回文数的函数&#xff08;三&#xff09;、实现判…

专业SEO优化指南:设置网站关键词的详细步骤

在网站SEO优化的过程中&#xff0c;关键词的设置是提升网站排名的关键步骤之一。那么&#xff0c;作为一名专业的SEO人员&#xff0c;如何有效地进行关键词设置呢&#xff1f;以下是一些详细的步骤&#xff1a; 1. 确定网站的核心关键词。 这需要深入理解网站的主题或产品。通…

整体性学习

整体性学习的顺序&#xff1a; 1.获取 2.理解&#xff08;明白&#xff09;3.拓展&#xff08;探究&#xff09;4.纠错&#xff08;调试&#xff09;5.应用 测试伴随每一个过程 例如&#xff1a; 吃饭&#xff08;去学习&#xff09;–>点菜&#xff08;学什么&#xff0c…

实时数据同步之Maxwell和Canal

文章目录 一、概述1、实时同步工具概述1.1 Maxwell 概述1.2 Canal概述 2、数据同步工作原理2.1 MySQL 主从复制过程2.2 两种工具工作原理 3、MySQL 的 binlog详解3.1 什么是 binlog3.2 binlog 的开启3.3 binlog 的分类设置 4、Maxwell和Canal对比5、环境安装 二、Maxwell 使用1…

日本极致产品力|一个战略符号打造年销售超4亿份的冰淇淋大单品

日本赤城乳业有一款冰棍——ガリガリ君(GariGarikun)&#xff0c;凭借着自己的“纯粹”打入市场&#xff0c;几十年来它成为许多日本人的夏日必备。他让人记忆最深刻的是战略符号——ガリガリ君&#xff0c;让赤城乳业打造出年销售4亿份的冰淇淋大单品。它是如何做到的呢? 石油…

Django——CBV源码解析

Django——CBV源码解析 以下是views模块调用as_view()方法的代码示例 # urls.py from django.contrib import admin from django.urls import path import app.viewsurlpatterns [path(admin/, admin.site.urls),path(app/, app.views.task.as_view()), ]# views.py class t…

Day55 动态规划 part15

Day55 动态规划 part15 392.判断子序列 我的思路&#xff1a; 自己还是只能想到双指针法 解答: class Solution {public boolean isSubsequence(String s, String t) {if(s.length() 0) {return true;}if(s.length() > t.length() || t.length() 0) {return false;}ch…

性能再升级!UNet+注意力机制,新SOTA分割准确率高达99%

UNet结合注意力机制能够有效提升图像分割任务的性能。 具体来说&#xff0c;通过将注意力模块集成到UNet的架构中&#xff0c;动态地重新分配网络的焦点&#xff0c;让其更集中在图像中对于分割任务关键的部分。这样UNet可以更有效地利用其跳跃连接特性&#xff0c;以精细的局…