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)
相关推荐
道法自然,人法天5 分钟前
PostgreSQL安装与初始化教程(二进制压缩包)
数据库·postgresql
yzs8721 分钟前
从Hydra到storage_engine:PostgreSQL列存引擎的性能跃迁与技术进化
数据库·postgresql
红云梦24 分钟前
官方 Anthropic Postgres MCP Server 存在 SQL 注入漏洞 -- SafeDB 是如何做到 4 层防御的
数据库·sql
TDengine (老段)32 分钟前
红有软件重构智能油田时序数据底座,支撑生产实时感知与设备预测性维护
大数据·数据库·人工智能·重构·时序数据库·tdengine
倒霉蛋小马1 小时前
【Redis】什么是缓存击穿?
数据库·redis·缓存
Jing_jing_X1 小时前
MCP (一)是什么?一文讲清 AI 如何连接现实世界
数据库·人工智能·oracle
阿凡观察站1 小时前
2026年工程项目管理软件推荐:这5款主流产品值得关注
大数据·数据库·低代码·finebi·简道云
逸Y 仙X2 小时前
文章二十一:ElasticSearch 词项查询与调度查询实战
java·大数据·数据库·elasticsearch·搜索引擎
李李李勃谦2 小时前
鸿蒙PCBI 报表工具:连接数据库与可视化报表生成
数据库·华为·交互·harmonyos
czlczl200209253 小时前
MAX()和MIN()优化
数据库·mysql·性能优化