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)
相关推荐
故乡dee云1 小时前
AWS 产品太多不会选?按“网站、数据库、文件、日志”4 类需求快速匹配
数据库·云计算·aws
曹牧3 小时前
C#:问号
前端·数据库·c#
奇树谦3 小时前
《现代 Key-Value 数据库原理:从 B+Tree 到 LSM Tree》-第五篇:现代数据库横向对比
数据库·lsm-tree
李白客3 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构
福大大架构师每日一题4 小时前
Redis 8.10.0 正式发布:紧凑哈希、批量导入、备份恢复、流与时序能力全面升级
数据库·redis·哈希算法
雨晨源码(同名B站)4 小时前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥5 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang5 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾5 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)6 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle