FastAPI整合SQLModel实现增删改查接口

01 FastAPI整合SQLModel实现增删改查接口

安装依赖

bash 复制代码
pip install fastapi "uvicorn[standard]" sqlmodel

定义模型

python 复制代码
from sqlmodel import Field, Session, SQLModel, create_engine, select


class User(SQLModel, table=True):
    """用户表"""
    id: int | None = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    age: int = Field(default=None, index=True)

创建表

python 复制代码
from fastapi import FastAPI
from sqlmodel import Field, Session, SQLModel, create_engine, select


class User(SQLModel, table=True):
    """用户表"""
    id: int | None = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    age: int = Field(default=None, index=True)


app = FastAPI()
db = "db.sqlite3"
db_url = "sqlite:///" + db
connect_args = {"check_same_thread": False}
engine = create_engine(db_url, echo=True, connect_args=connect_args)


@app.on_event("startup")
def on_startup():
    # 创建表
    SQLModel.metadata.create_all(engine)

新增用户

python 复制代码
@app.post("/user")
async def add_user(user: User):
    """新增用户的接口"""
    with Session(engine) as session:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user

获取所有用户

python 复制代码
@app.get("/user")
async def get_user_all():
    """获取所有用户的接口"""
    with Session(engine) as session:
        users = session.exec(select(User)).all()
        return users

完整代码

python 复制代码
from fastapi import FastAPI
from sqlmodel import Field, Session, SQLModel, create_engine, select


class User(SQLModel, table=True):
    """用户表"""
    id: int | None = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    age: int = Field(default=None, index=True)


app = FastAPI()
db = "db.sqlite3"
db_url = "sqlite:///" + db
connect_args = {"check_same_thread": False}
engine = create_engine(db_url, echo=True, connect_args=connect_args)


@app.on_event("startup")
def on_startup():
    # 创建表
    SQLModel.metadata.create_all(engine)


@app.post("/user")
async def add_user(user: User):
    """新增用户的接口"""
    with Session(engine) as session:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user


@app.get("/user")
async def get_user_all():
    """获取所有用户的接口"""
    with Session(engine) as session:
        users = session.exec(select(User)).all()
        return users


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app)
相关推荐
这个DBA有点耶5 分钟前
临时表从4.7秒到0.12秒:不是所有Using temporary都需要优化
数据库·mysql·代码规范
天衍四九-6 分钟前
排查慢SQL用explain分析执行计划,主要关注哪些字段?
数据库·sql
Meta3924 分钟前
PostgreSQL报SELECT rule‘s target entry X has different type from column “XXX“
数据库·postgresql·dubbo
洋不写bug1 小时前
二叉树(四)经典算法题目解析,公共祖先,二叉树构造,非递归遍历
数据库·算法·二叉树·二叉树构造·公共祖先
凯子坚持 c1 小时前
如何在教育平台中嵌入在线文档编辑组件:ONLYOFFICE Docs从部署到功能全验证
数据库·onlyoffice
SelectDB1 小时前
Apache Doris 选型实操:4 个维度 Checklist 与验证要点
大数据·数据库·掘金技术征文
SelectDB1 小时前
Apache Doris 高并发点查与实时写入笔记:一套引擎统一实时数仓与在线服务
大数据·数据库·数据分析
李白客1 小时前
时序数据库入门:什么是 TSDB?时序库与关系型数据库对比、主流产品选型指南(2026)
数据库·oracle·时序数据库
SelectDB1 小时前
Apache Doris 存算分离实操:从对象存储接入到多计算集群配置(附 SQL)
大数据·数据库·数据分析
SelectDB1 小时前
Apache Doris 多表 Join 优化实战:从 CBO 到 Colocate Join 配置(附 SQL)
大数据·数据库·数据分析