SQLModel FastAPI

2024年10月08日 SQLModel FastAPI 极客笔记

SQLModel FastAPI

在现代的web应用程序开发过程中,需要处理大量复杂的数据。SQLModel是一个SQLAlchemy的新数据模型库,允许开发人员轻松定义强类型的数据模型,并在FastAPI中使用。本文将详细介绍如何在FastAPI中使用SQLModel来处理数据库操作。

什么是SQLModel

SQLModel是一个基于Python的数据模型库,允许开发人员定义和操作数据模型。它提供了一种类似于Pydantic的方式来定义数据模型,但是它还提供了与SQLAlchemy的集成,使得数据模型可以直接映射到数据库表。SQLModel是基于数据模型的,这意味着我们可以定义数据模型,并使用这些模型来进行数据库操作。

安装SQLModel和FastAPI

要使用SQLModel和FastAPI,首先需要安装它们。可以使用pip来安装这两个库:

pip install sqlmodel fastapi

创建一个数据库连接

在开始之前,我们需要建立一个数据库连接。在这个示例中,我们将使用SQLite作为我们的数据库。可以使用SQLAlchemy来创建一个数据库连接并管理数据库操作。

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(SQLALCHEMY_DATABASE_URL)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

在这个示例中,我们创建了一个SQLite数据库连接,并创建了一个SessionLocal作为数据库会话的工厂。我们还创建了一个Base类作为所有数据模型的基类。

定义一个数据模型

现在我们来定义一个简单的数据模型。让我们创建一个用户模型,包含id、name和email字段。

from sqlmodel import Field, SQLModel

class User(SQLModel, table=True):
    id: int = Field(default=None, primary_key=True)
    name: str
    email: str

在这个示例中,我们定义了一个User类,它继承自SQLModel,并定义了id、name和email字段。我们还将table参数设置为True,这意味着这个模型将映射到数据库中的一个表。

创建数据库表

使用SQLAlchemy来创建本地会话和数据库表。

def create_db():
    Base.metadata.create_all(bind=engine)

增加一条用户信息

现在我们来增加一条用户信息到数据库中。

def create_user(db: Session, user: User):
    db_user = User.from_orm(user)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

获取用户信息

我们还可以通过id来获取用户信息。

def get_user(db: Session, user_id: int):
    return db.query(User).filter(User.id == user_id).first()

更新用户信息

更新用户信息的方法如下:

def update_user(db: Session, user_id: int, user: User):
    db_user = db.query(User).filter(User.id == user_id).first()
    for field, value in user.dict(exclude_unset=True).items():
        setattr(db_user, field, value)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

删除用户信息

最后,我们可以删除用户信息。

def delete_user(db: Session, user_id: int):
    db_user = db.query(User).filter(User.id == user_id).first()
    db.delete(db_user)
    db.commit()
    return db_user

在FastAPI中使用SQLModel

现在我们来创建一个FastAPI应用程序,连接到我们的数据库,并且可以使用我们定义的数据模型。

from fastapi import FastAPI
from sqlmodel import Session

app = FastAPI()

@app.on_event("startup")
def startup_event():
    create_db()

@app.post("/users/", response_model=User)
def create_user_api(user: User):
    with SessionLocal() as db:
        return create_user(db, user)

@app.get("/users/{user_id}", response_model=User)
def read_user_api(user_id: int):
    with SessionLocal() as db:
        return get_user(db, user_id)

@app.put("/users/{user_id}", response_model=User)
def update_user_api(user_id: int, user: User):
    with SessionLocal() as db:
        return update_user(db, user_id, user)

@app.delete("/users/{user_id}", response_model=User)
def delete_user_api(user_id: int):
    with SessionLocal() as db:
        return delete_user(db, user_id)

在这个示例中,我们创建了一个FastAPI应用程序,并定义了四个API端点来进行增删改查用户信息的操作。每个端点使用了我们之前定义的数据库操作函数,并使用了我们定义的数据模型。在每个端点中,我们使用了SessionLocal来管理数据库会话。

运行和测试

现在我们可以运行我们的FastAPI应用程序并测试API端点。

uvicorn main:app --reload

打开浏览器或使用工具如Postman或curl来测试API端点。

  • 创建用户信息:
curl -X POST "http://127.0.0.1:8000/users/" -H "Content-Type: application/json" -d '{"name": "Alice", "email": "alice@example.com"}'
  • 获取用户信息:
curl -X GET "http://127.0.0.1:8000/users/1"
  • 更新用户信息:
curl -X PUT "http://127.0.0.1:8000/users/1" -H "Content-Type: application/json" -d '{"name": "Bob"}'
  • 删除用户信息:
curl -X DELETE "http://127.0.0.1:8000/users/1"

通过以上步骤,您可以使用SQLModel和FastAPI来定义数据模型并进行数据库操作。这种方法将使您能够轻松管理和操作数据库,提高开发效率。

本文链接:http://so.lmcjl.com/news/14933/

展开阅读全文