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

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

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

相关推荐
qq_459234424 天前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
敲敲了个代码5 天前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展
诚思报告YH5 天前
视频面试软件市场洞察:2026 - 2032年复合年均增长率(CAGR)为10.3%
面试·职场和发展
重生之后端学习5 天前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
tyb3333335 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
开发者每周简报5 天前
AI 代理的难题:工具调用是怎么升级的
人工智能·程序人生·chatgpt·代理
W-琑5 天前
软件测试-自动化测试
功能测试·自动化
Pitiless-invader5 天前
MySQL 相关知识及面试问题汇总
面试·职场和发展
咖啡色格调5 天前
以码为念,以证为章——2048小游戏的软著登记心得
java·程序人生
重生之后端学习5 天前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先