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

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

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

相关推荐
趣多多代言人6 小时前
从零开始手写嵌入式实时操作系统
开发语言·arm开发·单片机·嵌入式硬件·面试·职场和发展·嵌入式
大刘讲IT7 小时前
精益管理与数字化转型的融合:中小制造企业降本增效的双重引擎
经验分享·程序人生·制造·传媒·零售·交通物流
开开心心就好18 小时前
高效报价软件,简化商铺定价流程
服务器·数据库·安全·面试·职场和发展·电脑·symfony
独行soc1 天前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
宇钶宇夕1 天前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
Thomas_YXQ2 天前
Unity3D游戏内存优化指南
游戏·unity·职场和发展·性能优化·蓝桥杯·游戏引擎·unity3d
Y1nhl2 天前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
一个 00 后的码农2 天前
26考研物理复试面试常见问答问题汇总(2)电磁波高频面试问题,物理专业保研推免夏令营面试问题汇总
考研·面试·职场和发展
宇钶宇夕2 天前
STEP 7 MicroWIN SMART V2.2 的详细安装步骤及注意事项
运维·服务器·程序人生·自动化
YuTaoShao2 天前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展