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)
相关推荐
Doraemomo8 分钟前
SQLite数据库
数据库·sqlite
云贝教育-郑老师26 分钟前
MySQL 的“黑匣子“:Performance Schema 把数据库内部变成一张可查的表
数据库·mysql
Mr数据杨1 小时前
【Codex】用下载中心模块管理系统导出文件与下载任务
django·codex·项目开发
这个DBA有点耶2 小时前
同城双活落地的三座山:网络延迟、脑裂预防、反向同步
数据库·架构·dba
青春之我_XP2 小时前
MySQL 常用日期函数 实战指南
数据库·sql·mysql·数据分析·数据库开发·日期函数
Nturmoils2 小时前
sys_dump 备了库,角色和权限别漏在外面
数据库
接着奏乐接着舞。3 小时前
【2026】73道Redis 常见面试题与参考答案
数据库·redis·后端·缓存
其实防守也摸鱼4 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
人生百态,人生如梦4 小时前
每日论文解读(9.1)——ReToolSQL:面向鲁棒Text-to-SQL的Agentic强化学习与工具增强两阶段训练框架
数据库·sql