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)
相关推荐
c8i2 小时前
django中的FBV 和 CBV
python·django
DemonAvenger5 小时前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥17 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud21 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术1 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug1 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom1 天前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*1 天前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰1 天前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*1 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring