SQLModel 教程:使用 select 查询数据
SQLModel 是一个强大的 Python 库,它结合了 SQLAlchemy 和 Pydantic 的优点,为数据库操作提供了简单直观的接口。本文将重点介绍如何使用 SQLModel 的 select 功能来查询数据库中的数据。
数据模型定义
首先我们需要定义一个数据模型,这里我们创建了一个 Hero
类来表示超级英雄:
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
这个模型定义了四个字段:
id
: 主键,自动生成name
: 英雄的公开名称secret_name
: 英雄的秘密身份age
: 可选字段,英雄的年龄
数据库连接设置
我们使用 SQLite 作为数据库后端:
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
echo=True
参数会输出执行的 SQL 语句,这对调试很有帮助。
创建数据库和表
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
这个方法会创建数据库文件(如果不存在)和所有定义的表。
插入测试数据
def create_heroes():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)
session.commit()
这里我们创建了三个英雄实例,并使用会话将它们添加到数据库中。
查询数据
核心的查询功能在 select_heroes
方法中:
def select_heroes():
with Session(engine) as session:
heroes = session.exec(select(Hero)).all()
print(heroes)
select(Hero)
创建了一个查询,session.exec()
执行这个查询,.all()
获取所有结果。这会返回数据库中所有的 Hero
记录。
主程序流程
def main():
create_db_and_tables()
create_heroes()
select_heroes()
程序的主要流程是:
- 创建数据库和表
- 插入测试数据
- 查询并打印所有英雄
进阶查询示例
虽然示例中只展示了最简单的查询,但 SQLModel 的 select 功能非常强大。你可以:
- 添加过滤条件:
select(Hero).where(Hero.age > 30)
- 只选择特定字段:
select(Hero.name, Hero.age)
- 排序结果:
select(Hero).order_by(Hero.age.desc())
- 限制返回数量:
select(Hero).limit(5)
总结
通过这个教程,我们学习了如何使用 SQLModel 进行基本的数据库操作,特别是如何使用 select 语句查询数据。SQLModel 的查询语法既保持了 Python 的优雅,又提供了强大的功能,是处理数据库操作的优秀选择。
在实际项目中,你可以根据需要构建更复杂的查询,SQLModel 都能很好地支持。记住总是使用会话上下文管理器 (with Session...
) 来确保资源被正确释放。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考