fastzdp_sqlmodel新增get_first和is_exitsts方法

news2024/11/15 21:34:05

说明

经过fastzdp_login的整合,我们发现,fastzdp_sqlmodel还可以继续封装两个便捷的方法。

  • get_first:获取查询结果集中的第一条数据
  • is_exitsts:判断数据是否已存在

封装get_first方法

def get_first(engine, model, query_dict: dict):
    """
    获取查询结果中的第一条数据
    :param engine: 引擎对象
    :param model: 模型类
    :param query_dict: 查询字典
    :return: 存在数据返回模型对象,否则返回None
    """
    data = get_by_dict(engine, model, query_dict)
    if isinstance(data, list) and len(data) > 0:
        return data[0]

测试get_first方法

示例:查询名字叫张三1的用户

from typing import Optional
from sqlmodel import Field, SQLModel
import fastzdp_sqlmodel as fs


class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    age: Optional[int] = None


# 创建数据库引擎
engine = fs.get_engine(database="fastzdp_sqlmodel")

# 初始化表格
fs.init_table(engine)

# 创建数据
fs.add(engine, User(name="张三1", age=23))
fs.add(engine, User(name="张三2", age=23))
fs.add(engine, User(name="张三3", age=23))

# 查询第一条数据
u = fs.get_first(engine, User, {"name": "张三1"})
print(u)

执行结果如下:
在这里插入图片描述

从测试结果来看,这个方法是基本符合预期的。

封装is_exists方法

这个方法比较简单,我们只需要执行查询,有查询结果即可。

def is_exists(engine, model, query_dict: dict) -> bool:
    """
    根据查询字典指定的键值对等值查询数据
    :param engine: 引擎对象
    :param model: 模型类
    :param query_dict: 查询字典
    """
    data = get_by_dict(engine, model, query_dict)
    return isinstance(data, list) and len(data) > 0

测试is_exists方法

我们分别判断一个存在的数据和一个不存在的数据,查看结果是否符合预期。

from typing import Optional
from sqlmodel import Field, SQLModel
import fastzdp_sqlmodel as fs


class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    age: Optional[int] = None


# 创建数据库引擎
engine = fs.get_engine(database="fastzdp_sqlmodel")

# 初始化表格
fs.init_table(engine)

# 创建数据
fs.add(engine, User(name="张三1", age=23))
fs.add(engine, User(name="张三2", age=23))
fs.add(engine, User(name="张三3", age=23))

# 判断是否存在
print(fs.is_exists(engine, User, {"name": "张三1"}))
print(fs.is_exists(engine, User, {"name": "张三11"}))

执行结果如下:
在这里插入图片描述

从执行结果来看,是基本符合预期的。

总结

本教程主要记录了get_first和is_exists这两个方法的封装过程。

如果大家需要FastAPI零基础到项目实战的全套录播课程,或者Python一对一的私教课指导,欢迎留言或者私信。

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

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

相关文章

优化算法|牛顿-拉夫逊优化算法(NRBO)详解

算法介绍 本篇推文将介绍一种新的智能优化算法,牛顿-拉夫逊优化算法(Newton-Raphson-based optimizer, NBRO),该成果由学者Sowmya等人于2024年2月发表于期刊《Engineering Applications of Artificial Intelligence》。文末提供了原文作者的完整代码git…

【python爬虫】邮政包裹物流查询2瑞数6加密

大家好呀,我是你们的好兄弟【星云牛马】,今天给大家带来的是瑞数6的补环境的总结,补环境肯定是需要一些基础补环境知识的,所以建议没有基础的小伙伴可以加入学习群进行学习,有基础的伙伴加入交流起来。 QQ群&#xff…

《向量数据库指南》——AI应用部署落地与权限安全差别

部署落地与权限安全差别 RAG部署有许多系统化优化点 RAG分化程度非常高,因为RAG是许多东西的组成,类似大数据生态,里边有非常多的环节,从数据抓取、数据清洗、数据挖掘,然后预处理,再经过模型分析,比如说embedding模型生成向量,然后再做数据的持久化,serving stack,就…

打卡学习Python爬虫第二天|数据解析Re 正则表达式

在前面的学习中,我们已经基本掌握了抓取整个网页的基本技能,但是在实际的需求当中,我们不需要整个网页的内容,只需要一小部分。这就涉及到数据提取的问题。 三种数据解析的方式:可混合使用 1、re解析 2、bs4解析 3…

无人机低成本集群技术实现详解

在现代科技的迅猛发展中,无人机技术已广泛应用于军事侦察、环境监测、农业植保、物流配送等多个领域。其中,无人机集群技术作为提高任务效率、降低成本的重要手段,正受到越来越多的关注。本项目旨在研发一套低成本无人机集群系统,…

<C语言>指针的深度学习

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名与数组名 3.数组指针的使用 四、数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针 八、回调函数 1…

微信云开发云存储全部下载

一、安装 首先按照这个按照好依赖 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 二、登录 tcb login 下载 首先在你要下载到的本地文件内创建一个名为:cloudbaserc.json 的json文件。 填入你的id {"envId":"你的云开发环…

STM32基础篇:定时器 × 时基单元

定时器简介 定时器是一种专门负责定时功能的片上外设。F1系列的单片机最多有14个定时器(TIM1~TIM14),具体如下表: 类型外设名称基本定时器TIM6和TIM7通用定时器TIM2~TIM5和TIM9~TIM14高级定时器TIM1和TIM8 基本定时器是功能最简…

Chrome浏览器无法打开无痕模式的解决方案

1.在设置---关于Chrome里面进行升级,升级到最新版本 2.windowsR打开运行输入regedit打开注册表 3、在HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome下面找到IncognitoModeAvailability将值修改为0,重新打开浏览器即可打开无痕模式

【SpringBoot】SpringBoot 中 Bean 管理和拦截器的使用

目录 1.Bean管理 1.1 自定义Bean对象 1.2 Bean的作用域和生命周期 2.拦截器的使用 1.Bean管理 默认情况下,Spring项目启动时,会把我们常用的Bean都创建好放在IOC容器中,但是有时候我们自定义的类需要手动配置bean,这里主要介绍…

掌握这三种方法,让你快速获取商品信息,数据采集不再难

摘要: 面对琳琅满目的天猫商品,如何迅速精准地获取所需信息成为电商竞争的关键。本文揭秘三种实战技巧,助你在数据采集路上快人一步,让繁琐的数据收集变得轻而易举。 一、如何在信息海洋中,快速捞取天猫商品的“珍宝…

wifi密码字典之8位纯数字

最近研究网络安全,对无线网络进行渗透测试,用了kali linux和ubuntu linux,比较了几个抓包与分析工具,最终选择了aircrack-ng,同样的流程用已知的wifi密码测试通过,对网络安全渗透测试要用到密码字典&#x…

midwayjs 无法启动 无任何日志和报错

比如我的mqtt,原本是直接 imports:[mqtt],但无法启动 无任何日志和报错 解决直接 this.app.addConfigObject(mqtt) addConfigObject作用:将 MQTT 配置添加到应用的配置中。addConfigObject 方法允许你在应用初始化完成后动态地添加或更新应…

Ubuntu 添加 GitLab 官方仓库报错“curl is unable to connect to packagecloud.io over TLS”

Ubuntu 安装 Gitlab 报错“curl is unable to connect to packagecloud.io over TLS” 1 现象2 问题排查3 解决方案4 验证 1 现象 Ubuntu 上添加 GitLab 官方仓库时报错“……curl is unable to connect to packagecloud.io over TLS……” 2 问题排查 终端提示中给出两种可…

复现nnUNet2并跑通自定义数据

复现nnUNet2并跑通自定义数据 1. 配置环境2. 处理数据集2.1 创建文件夹2.2 数据集格式转换2.3 数据集预处理 3. 训练 1. 配置环境 stage1:创建python环境,这里建议python3.10 conda create --n nnunet python3.10 conda activate nnunet stage2&#x…

Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用

一、介绍 随着Android接入kotlin开发,Android之前好多模式也渐渐被kotlin替代。开发模式也在做渐进的转型,从MVC到MVP在到MVVP以及现在的MVI等。 流IO在java中和kotlin中使用率都是比较高的,场景很多。如Java的IO和NIO,再到我们现…

使用fastzdp_sqlmodel改造fastzdp_login中关于用户注册和用户登录的接口

原本的代码 user_router.post("/register/", summary"用户注册") def register_user(username: str Body(str, min_length2, max_length36),password: str Body(str, min_length6, max_length128),db: SASession Depends(get_db), ):# 检查用户名是否已…

家政服务管理系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,管理阿姨管理,家政公司管理,服务项目管理,家政预约管理,评价管理,留言板管理,系统管理 微信端账号功能包括…

【串口助手开发】添加保存数据功能,按钮按下保存接收区所有数据

1、功能描述 想要将串口助手接收区域内所有的内容保存下来 并且通过按钮,按下后,跳出一个弹窗,显示保存路径,并且保存txt文件 按下按钮,保存txt数据文件。 2、代码讲解 定义一个全局变量,接收所有的数…

STM32第十二节(中级篇):串口通信(第二节)——串口固件库函数以及串口发送和接收代码讲解

STM32第十二节(中级篇):串口通信(第二节)——串口固件库函数以及串口发送和接收代码讲解 串口固件库函数 代码片段 /** * brief USART Init Structure definition */ typedef struct {uint32_t USART_BaudRate; …