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

简介

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

创建模型

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

python 复制代码
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)  # 通过此语句创建表

创建实例

python 复制代码
NewPlayer = Player(name="Salah", club="Liverpool", country="Eygpt")

创建会话

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

python 复制代码
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() 方法查询数据库中的数据:

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

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

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

返回第一个查询数据

python 复制代码
first = session.query(Player).first()
print(first)

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

高级查询

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

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

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

python 复制代码
# 单个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操作符
python 复制代码
query_result = session.query.filter(or_(Player.name == 'Salah', Player.id > 1))
  • in操作符
python 复制代码
query_result = session.query.filter(Player.club.in_(["Liverpool", "Chelsea"]))
  • not in操作符,在in操作符的基础加上运算符'~'即可
python 复制代码
query_result = session.query.filter(~Player.country.in_(["Eygpt", "China"]))

总结

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

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

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

相关推荐
8Qi83 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
嵌入式ZYXC6 小时前
第3篇:《面试题:I2C为什么要加上拉电阻?阻值怎么选?》
stm32·单片机·嵌入式硬件·面试·职场和发展
sbjdhjd7 小时前
面试(5)| 3.5 小时面试复盘第五弹:加班出差 + 客户响应 + 压力面全拆解
经验分享·程序人生·面试·职场和发展·开源·跳槽·求职招聘
可可南木9 小时前
3070文件格式--21--fixture文件 3
功能测试·测试工具
小欣加油10 小时前
leetcode2161 根据给定数字划分数组
数据结构·c++·算法·leetcode·职场和发展
sbjdhjd11 小时前
面试题完结 | 投票题 + 到岗时间 + 压力缓解
经验分享·笔记·面试·职场和发展·开源·求职招聘·印象笔记
8Qi811 小时前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
漫友也是程序猿11 小时前
mfc140u.dll缺失的排查方法:从 VC 运行库、软件完整性到系统检查
程序人生·电脑
郝学胜-神的一滴11 小时前
Qt 高级开发 027: QTabWidget自定义样式表美化实战
开发语言·c++·qt·程序人生·软件构建·用户界面
暗冰ཏོ12 小时前
软件测试完整学习指南:从入门到自动化、性能与安全测试实战
软件测试·功能测试·单元测试·集成测试·压力测试·测试·安全性测试