软件测试|SQLAlchemy query() 方法查询数据

news2024/11/19 3:30:21

简介

上一篇文章我们介绍了SQLAlchemy 的安装和基础使用,本文我们来详细介绍一下如何使用SQLAlchemy的query()方法来高效的查询我们的数据。

创建模型

我们可以先创建一个可供我们查询的模型,也可以复用上一篇文章中我们创建的模型,代码如下:

from sqlalchemy import Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine

Base = declarative_base()
engine = create_engine("mysql+pymysql://root:root@localhost:3306/apptest", echo=True)


class Player(Base):
    __tablename__ = "player"
    id = Column(Integer, primary_key=True)
    name = Column(String(20), default=None, nullable=False, comment="姓名")
    club = Column(String(20), default=None, nullable=False, comment="俱乐部")
    country = Column(Integer, default=0, nullable=False, comment="国家")

    def __repr__(self):
        Name = self.player_name
        Club = self.club_name
        Country = self.country_name
        return f"Player: name: {Name}, club: {Club}, country: {Country}"


Base.metadata.create_all(engine)  # 通过此语句创建表

创建实例

NewPlayer = Player(name="Salah", club="Liverpool", country="Eygpt")

创建会话

在使用 SQLAlchemy 进行查询之前,我们需要先建立与数据库的连接。通常,我们需要配置一个数据库引擎并创建一个会话对象。代码如下:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+pymysql://root:root@localhost:3306/apptest", echo=True)
Session = sessionmaker(bind=engine)
session = Session()

查询对象

query() 方法是 SQLAlchemy 中用于构建数据库查询的主要方式。我们可以通过传递模型类来创建查询对象,然后使用链式方法来构建查询条件和操作。

以下是一个示例,演示如何使用 query() 方法查询数据库中的数据:

query_result = session.query(Player).all()
for result in query_result:
    print(f"查询结果为: {result}")

# [out]查询结果为: Player: name: Salah, club: Liverpool, country: Eygpt

因为我们只写入了一个数据,所以全部查询出来的数据也是只有一条数据,当我们数据多起来之后,我们可以进行更为复杂的查询,添加更多条件。

返回第一个查询数据

first = session.query(Player).first()
print(first)

-----------
输出结果为:
[out]查询结果为: Player: name: Salah, club: Liverpool, country: Eygpt

高级查询

我们可以在SQLAlchemy中添加filter()条件实现高级查询,示例如下:

  • like操作符
query_result = session.query(Player).filter(Player.name.like("%sa%"))
  • and操作符
query_result = session.query.filter(and_(Player.name == 'Salah', Player.id > 1))

除了使用and操作符,我们也可以使用其他方式达到and操作符的效果,比如添加多个filter()或者单个filter()中使用多个表达式,示例如下:

# 单个filter()中设置多个表达式
query_result = session.query.filter(Player.name == 'Salah', Player.id > 1)

# 使用多个filter()
query_result = session.query.filter(Player.name == 'Salah').filter(Player.id > 1)
  • or操作符
query_result = session.query.filter(or_(Player.name == 'Salah', Player.id > 1))
  • in操作符
query_result = session.query.filter(Player.club.in_(["Liverpool", "Chelsea"]))
  • not in操作符,在in操作符的基础加上运算符’~’即可
query_result = session.query.filter(~Player.country.in_(["Eygpt", "China"]))

总结

本文主要介绍了SQLAlchemy query()方法的使用,介绍了基础查询以及高级查询的使用,通过构建查询对象并应用过滤条件、排序和聚合操作,我们可以轻松地从数据库中检索所需的数据。希望本文可以帮助到大家。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

RabbitMQ脑裂处理

脑裂现象: Network partition detected Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data. Please read RabbitMQ documentation about network partitions and the possible solutions. 转载请在文…

山东特产,乳山生蚝有话说

牡蛎,又叫生蚝,是无数吃货钟爱的海鲜美味。爱吃生蚝的法国人称之为“海中牛奶”,我国民间也有说法:“冬至到清明,蚝肉肥晶晶。”说的就是眼下,生蚝最肥美的冬春时节,也是“中国牡蛎之乡”山东乳…

vue中设置注释模板

参考地址 ctrlshiftp 打开编辑器配置输入configure user snippets - 选择 new global snipp files - 命名为 vueComment,弹出注释模板,即可自定义注释 如下/// 回车 即可在代码块中使用注释 { "Print to console": {"prefix": &q…

整型和浮点数在内存中的存储

前言 我们都知道数据在计算机中是以二进制的形式存储的,那么问题来了,不同类型的数据的具体存储方式是什么,今天我想就整形和浮点数展开叙述。 一. 整数在内存中的存储 1.1源码,反码和补码 整数的2进制表⽰⽅法有三种&#xff0…

静态住宅代理与动态住宅代理的区别?如何选?

住宅代理ip分类两种类型:静态住宅代理和动态住宅代理,他们有什么区别又能用在什么场景呢?我们先从他们是如何运作开始。 一、什么是住宅代理ip isp住宅代理ip我们称为真人住宅代理,地址是从真人/家庭中出发,安全性更高…

软件测试|Pydantic处理时间类型数据

简介 我们之前介绍过使用pydantic验证数据,比如校验数据的格式等,但是在我们的日常工作中,还有一种数据是需要我们验证的,比如时间数据,时间数据不同于字符串,列表等数据,与他们的验证不一样&a…

HNU-模式识别-作业1-视频监控系统

模式识别-作业1 计科210X 甘晴void 202108010XXX 【评分:98/100】 题目: 查阅相关技术资料,根据自己家庭相应的情况,设计一个视频监控系统。要求: 系统功能说明系统布线图及说明系统软硬件配置说明 饱和式自家用…

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-GRU蛇群算法优化门控循环单元的数…

Leetcode21-环和杆(2103)

1、题目 总计有 n 个环,环的颜色可以是红、绿、蓝中的一种。这些环分别穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings ,表示这 n 个环在杆上的分布。rings 中每两个字符形成一个 颜色位置对 ,用于描述每个环&#xf…

超越GPU:TPU能成为接班人吗?

在计算机的世界里,硬件技术的发展一直在快速推进。今天,我们要谈论的就是一种特殊的处理器:TPU,全称是Tensor Processing Unit。在我们开始深入探讨TPU之前,先了解一下两个重要的芯片技术,FPGA和ASIC。 FP…

部署Tomcat

Tomcat简介 名称由来:Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的,后来他帮助将其变 为开源项目,并由Sun贡献给Apache软件基金会,由于大部分开源项目OReilly都会出一本相关的 书,并且将其封面设计成某个动物…

基于SSM的戏剧推广网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是…

TikTok电商加快闭环,独享IP为运营带来哪些好处?

近日有消息称TikTok电商在加快闭环,以后商家可能无法继续在TikTok上为其他电商平台或独立站引流了。如今“TikTok Shop Shopping Center”平台正在构建,将各种购物渠道整合为一体,这可能是一种趋势,意味着TikTok逐渐从社交应用转型…

web前端第二次

第一题&#xff1a; <!DOCTYPE html> <html> <head><title>计算奇数和</title> </head> <body><label for"input">请输入一个正整数&#xff1a;</label><input type"number" id"input&qu…

Temu活动库存怎么设置?Temu活动报名后无库存怎么办?站斧浏览器

Temu活动库存怎么设置&#xff1f; 了解平台规则&#xff1a;在设置库存之前&#xff0c;详细了解Temu平台的库存管理规则和最佳实践。 设定合理库存量&#xff1a;根据商品的销售历史、市场需求和生产能力&#xff0c;设定合理的库存量。 定期检查与调整&#xff1a;库存设…

供应链管理是什么?专业就业前景如何?

什么是供应链管理 供应链&#xff08;Supply Chain&#xff09;&#xff0c;也被称为价值链或需求链&#xff08;Demand Chain&#xff09;&#xff0c;包括顾客、供应商、过程、产品以及对产品和服务有影响的各种资源。供应链强调的是公司之间的过程与关系。 《中华人民共和国…

浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

一.前言 在浏览器中实现播放RTSP实时视频流&#xff0c;⼤体上有如下⼏个⽅案&#xff1a; ⽅案一&#xff1a;浏览器插件⽅案 ActiveX、NPAPI、PPAPI ActiveX插件适用于IE浏览器&#xff0c;NPAPI与PPAPI插件适用于谷歌浏览器&#xff0c;不过这些插件都已经不被浏览器所支持…

算法总结——单调栈

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 文章目录 一、单调栈的定义二、单调栈的应用&#xff1a;寻找左边第一个比它小的数寻找左边第一个比它小的数的下标寻找右边第一个小于它的数寻找右边第一个小于它的数的…

HCIP -- 重发布实验

要求&#xff1a; 实现&#xff1a; [rl]interface LoopBack 0 [rl-LoopBack0]ip ad [rl-LoopBack0]ip address 1.1.1.1 32 [rl-LoopBack0]q [rl]int [rl]interface go/0/0 [rl-GigabitEthernet0/0/0]ip add [rl-GigabitEthernet0/0/0]ip address 12.1.1.1 24on the interface…

第二篇:新建node项目并运行

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 安装 Node.js&#xff1a;首先&#xff0c;确保你的…