使用SQLModel和FastAPI构建简单的英雄管理API

使用SQLModel和FastAPI构建简单的英雄管理API

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

SQLModel是一个强大的Python库,它结合了SQLAlchemy和Pydantic的优点,让数据库操作和API开发变得更加简单高效。本文将介绍如何使用SQLModel和FastAPI构建一个简单的英雄管理API。

项目概述

这个示例项目展示了一个完整的CRUD API实现,主要功能包括:

  • 英雄数据的模型定义
  • 数据库表创建
  • 英雄数据创建
  • 英雄数据查询

核心组件解析

1. 数据模型定义

首先我们需要定义Hero数据模型,它继承自SQLModel:

class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    secret_name: str
    age: Optional[int] = Field(default=None, index=True)

这个模型有几个关键点:

  • table=True 表示这个类同时是一个SQLAlchemy模型
  • 字段使用Python类型注解定义
  • Field用于配置额外的数据库属性
  • index=True为字段创建数据库索引,提高查询效率

2. 数据库配置

接下来配置SQLite数据库连接:

sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
connect_args = {"check_same_thread": False}
engine = create_engine(sqlite_url, echo=True, connect_args=connect_args)

这里有几个重要参数:

  • echo=True 会在控制台输出执行的SQL语句,方便调试
  • check_same_thread=False 是SQLite在多线程环境下需要的配置

3. 数据库表创建

使用SQLModel的元数据创建所有表:

def create_db_and_tables():
    SQLModel.metadata.create_all(engine)

这个函数会在应用启动时被调用,确保数据库表存在。

4. FastAPI应用初始化

创建FastAPI应用并在启动时创建数据库表:

app = FastAPI()

@app.on_event("startup")
def on_startup():
    create_db_and_tables()

@app.on_event("startup")装饰器确保在应用启动时执行表创建操作。

API端点实现

1. 创建英雄

@app.post("/heroes/")
def create_hero(hero: Hero):
    with Session(engine) as session:
        session.add(hero)
        session.commit()
        session.refresh(hero)
        return hero

这个端点实现了:

  • 接收Hero模型作为请求体
  • 使用上下文管理器管理数据库会话
  • 添加、提交并刷新英雄数据
  • 返回创建后的英雄对象

2. 查询英雄列表

@app.get("/heroes/")
def read_heroes():
    with Session(engine) as session:
        heroes = session.exec(select(Hero)).all()
        return heroes

这个端点:

  • 使用SQLModel的select语句查询所有英雄
  • 返回英雄列表

技术亮点

  1. 类型安全:全程使用Python类型注解,IDE可以提供更好的代码提示和类型检查
  2. 简洁的ORM:SQLModel的API设计非常简洁,减少了样板代码
  3. 自动文档:FastAPI会自动为API生成交互式文档
  4. 开发友好echo=True参数让开发者可以直观看到执行的SQL语句

扩展建议

这个基础示例可以进一步扩展:

  • 添加更新和删除端点
  • 实现分页查询
  • 添加数据验证
  • 实现更复杂的查询条件

SQLModel与FastAPI的结合为构建数据驱动的API提供了非常高效的开发体验,既保持了Python的简洁性,又提供了强大的功能和类型安全。

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚榕芯Noelle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值