上一篇文章我们介绍了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()
方法的使用,介绍了基础查询以及高级查询的使用,通过构建查询对象并应用过滤条件、排序和聚合操作,我们可以轻松地从数据库中检索所需的数据。希望本文可以帮助到大家。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!